aboutsummaryrefslogtreecommitdiffstats
path: root/lib/diameter/examples/code/server.erl
diff options
context:
space:
mode:
authorAnders Svensson <[email protected]>2011-12-20 14:51:56 +0100
committerAnders Svensson <[email protected]>2011-12-20 14:51:56 +0100
commit58336ee5c613de56f6d69562cd59b651eef734f0 (patch)
tree5a593244269992c86b9157229a2cb6d0242bbb79 /lib/diameter/examples/code/server.erl
parente986108d71a71d835c241d22cdb08f97584958c5 (diff)
parent84873533d8caf176a710135d15e3578168350eab (diff)
downloadotp-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/server.erl')
-rw-r--r--lib/diameter/examples/code/server.erl88
1 files changed, 88 insertions, 0 deletions
diff --git a/lib/diameter/examples/code/server.erl b/lib/diameter/examples/code/server.erl
new file mode 100644
index 0000000000..ebb408e501
--- /dev/null
+++ b/lib/diameter/examples/code/server.erl
@@ -0,0 +1,88 @@
+%%
+%% %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 server that can respond to the base protocol
+%% RAR sent by the client example.
+%%
+%% The simplest example to start a server listening on the loopback
+%% address (which will serve the example usage given in client.erl) is
+%% like this assuming diameter is already started (eg. diameter:start()):
+%%
+%% server:start().
+%% server:listen(tcp).
+%%
+%% The first call starts a service, the second adds a transport listening
+%% on the default port.
+%%
+
+-module(server).
+
+-include_lib("diameter/include/diameter.hrl").
+-include_lib("diameter/src/app/diameter_gen_base_rfc3588.hrl").
+
+-export([start/1, %% start a service
+ listen/2, %% add a listening transport
+ stop/1]). %% stop a service
+
+%% Convenience functions using the default service name, ?SVC_NAME.
+-export([start/0,
+ listen/1,
+ stop/0]).
+
+-define(SVC_NAME, ?MODULE).
+-define(APP_ALIAS, ?MODULE).
+-define(CALLBACK_MOD, server_cb).
+
+%% The service configuration. In a server supporting multiple Diameter
+%% applications each application may have its own, although they could all
+%% be configured with a common callback module.
+-define(SERVICE(Name), [{'Origin-Host', atom_to_list(Name) ++ ".example.com"},
+ {'Origin-Realm', "example.com"},
+ {'Vendor-Id', 193},
+ {'Product-Name', "Server"},
+ {'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).
+
+%% listen/2
+
+listen(Name, T) ->
+ peer:listen(Name, T).
+
+listen(T) ->
+ listen(?SVC_NAME, T).
+
+%% stop/1
+
+stop(Name) ->
+ peer:stop(Name).
+
+stop() ->
+ stop(?SVC_NAME).