diff options
author | Anders Svensson <[email protected]> | 2011-12-20 14:51:56 +0100 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2011-12-20 14:51:56 +0100 |
commit | 58336ee5c613de56f6d69562cd59b651eef734f0 (patch) | |
tree | 5a593244269992c86b9157229a2cb6d0242bbb79 /lib/diameter/examples/code/client.erl | |
parent | e986108d71a71d835c241d22cdb08f97584958c5 (diff) | |
parent | 84873533d8caf176a710135d15e3578168350eab (diff) | |
download | otp-58336ee5c613de56f6d69562cd59b651eef734f0.tar.gz otp-58336ee5c613de56f6d69562cd59b651eef734f0.tar.bz2 otp-58336ee5c613de56f6d69562cd59b651eef734f0.zip |
Merge branch 'anders/diameter/testsuites/OTP-9829' into maint
* anders/diameter/testsuites/OTP-9829: (21 commits)
Install example dictionaries
Move example code to examples/code
Move example dictionaries to examples/dict
Set name/prefix at compilation, not in dictionaries
Add RFC 4004 (MIP) dictionary
Add RFC 4740 (SIP) dictionary
Add RFC 4072 (EAP) dictionary
Add RFC 4006 (CC) dictionary
Add RFC 4005 (NAS) dictionary
Add standards testcase to compiler suite
Remove {init,end}_per_group workaround
Use new syntax for specifying ct group properties
Increase timetrap in compiler suite
Minor capx suite tweaks
Minor makefile tweak
Remove trailing whitespace
Update skip condition in gen_sctp suite
Reintroduce gen_sctp suite
Remove delay from connect in transport suite
Add codec testcase for decode of unknown AVPs
...
Diffstat (limited to 'lib/diameter/examples/code/client.erl')
-rw-r--r-- | lib/diameter/examples/code/client.erl | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/lib/diameter/examples/code/client.erl b/lib/diameter/examples/code/client.erl new file mode 100644 index 0000000000..9e65f98de0 --- /dev/null +++ b/lib/diameter/examples/code/client.erl @@ -0,0 +1,125 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2010-2011. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% + +%% +%% An example Diameter client that can sends base protocol RAR +%% requests to a connected peer. +%% +%% The simplest usage is as follows this to connect to a server +%% listening on the default port on the local host, assuming diameter +%% is already started (eg. diameter:start()). +%% +%% client:start(). +%% client:connect(tcp). +%% client:call(). +%% +%% The first call starts the a service with the default name of +%% ?MODULE, the second defines a connecting transport that results in +%% a connection to the peer (if it's listening), the third sends it a +%% RAR and returns the answer. +%% + +-module(client). + +-include_lib("diameter/include/diameter.hrl"). +-include_lib("diameter/src/app/diameter_gen_base_rfc3588.hrl"). + +-export([start/1, %% start a service + connect/2, %% add a connecting transport + call/1, %% send using the record encoding + cast/1, %% send using the list encoding and detached + stop/1]). %% stop a service +%% A real application would typically choose an encoding and whether +%% they want the call to return the answer or not. Sending with +%% both the record and list encoding here, one detached and one not, +%% is just for demonstration purposes. + +%% Convenience functions using the default service name, ?SVC_NAME. +-export([start/0, + connect/1, + stop/0, + call/0, + cast/0]). + +-define(SVC_NAME, ?MODULE). +-define(APP_ALIAS, ?MODULE). +-define(CALLBACK_MOD, client_cb). + +-define(L, atom_to_list). + +%% The service configuration. As in the server example, a client +%% supporting multiple Diameter applications may or may not want to +%% configure a common callback module on all applications. +-define(SERVICE(Name), [{'Origin-Host', ?L(Name) ++ ".example.com"}, + {'Origin-Realm', "example.com"}, + {'Vendor-Id', 0}, + {'Product-Name', "Client"}, + {'Auth-Application-Id', [?DIAMETER_APP_ID_COMMON]}, + {application, [{alias, ?APP_ALIAS}, + {dictionary, ?DIAMETER_DICT_COMMON}, + {module, ?CALLBACK_MOD}]}]). + +%% start/1 + +start(Name) + when is_atom(Name) -> + peer:start(Name, ?SERVICE(Name)). + +start() -> + start(?SVC_NAME). + +%% connect/2 + +connect(Name, T) -> + peer:connect(Name, T). + +connect(T) -> + connect(?SVC_NAME, T). + +%% call/1 + +call(Name) -> + SId = diameter:session_id(?L(Name)), + RAR = #diameter_base_RAR{'Session-Id' = SId, + 'Auth-Application-Id' = 0, + 'Re-Auth-Request-Type' = 0}, + diameter:call(Name, ?APP_ALIAS, RAR, []). + +call() -> + call(?SVC_NAME). + +%% cast/1 + +cast(Name) -> + SId = diameter:session_id(?L(Name)), + RAR = ['RAR', {'Session-Id', SId}, + {'Auth-Application-Id', 0}, + {'Re-Auth-Request-Type', 1}], + diameter:call(Name, ?APP_ALIAS, RAR, [detach]). + +cast() -> + cast(?SVC_NAME). + +%% stop/1 + +stop(Name) -> + peer:stop(Name). + +stop() -> + stop(?SVC_NAME). |