aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ic/examples
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/ic/examples
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/ic/examples')
-rw-r--r--lib/ic/examples/all-against-all/Makefile117
-rw-r--r--lib/ic/examples/all-against-all/Makefile.win32138
-rw-r--r--lib/ic/examples/all-against-all/ReadMe122
-rw-r--r--lib/ic/examples/all-against-all/callbacks.c45
-rw-r--r--lib/ic/examples/all-against-all/client.c153
-rw-r--r--lib/ic/examples/all-against-all/client.erl53
-rw-r--r--lib/ic/examples/all-against-all/client.java60
-rw-r--r--lib/ic/examples/all-against-all/random.idl50
-rw-r--r--lib/ic/examples/all-against-all/rmod_random_impl.erl48
-rw-r--r--lib/ic/examples/all-against-all/server.c261
-rw-r--r--lib/ic/examples/all-against-all/server.erl40
-rw-r--r--lib/ic/examples/all-against-all/server.java82
-rw-r--r--lib/ic/examples/all-against-all/serverImpl.java42
-rw-r--r--lib/ic/examples/c-client/Makefile86
-rw-r--r--lib/ic/examples/c-client/ReadMe46
-rw-r--r--lib/ic/examples/c-client/client.c130
-rw-r--r--lib/ic/examples/c-client/random.idl51
-rw-r--r--lib/ic/examples/c-client/rmod_random_impl.erl52
-rw-r--r--lib/ic/examples/c-client/test.erl43
-rw-r--r--lib/ic/examples/c-server/Makefile89
-rw-r--r--lib/ic/examples/c-server/ReadMe45
-rw-r--r--lib/ic/examples/c-server/callbacks.c45
-rw-r--r--lib/ic/examples/c-server/client.c124
-rw-r--r--lib/ic/examples/c-server/client.erl44
-rw-r--r--lib/ic/examples/c-server/random.idl49
-rw-r--r--lib/ic/examples/c-server/server.c245
-rw-r--r--lib/ic/examples/erl-genserv/ReadMe30
-rw-r--r--lib/ic/examples/erl-genserv/random.idl50
-rw-r--r--lib/ic/examples/erl-genserv/rmod_random_impl.erl63
-rw-r--r--lib/ic/examples/erl-plain/ReadMe27
-rw-r--r--lib/ic/examples/erl-plain/random.idl52
-rw-r--r--lib/ic/examples/erl-plain/rmod_random_impl.erl32
-rw-r--r--lib/ic/examples/java-client-server/ReadMe69
-rw-r--r--lib/ic/examples/java-client-server/client.java60
-rw-r--r--lib/ic/examples/java-client-server/random.idl49
-rw-r--r--lib/ic/examples/java-client-server/server.java82
-rw-r--r--lib/ic/examples/java-client-server/serverImpl.java42
-rw-r--r--lib/ic/examples/pre_post_condition/Makefile128
-rw-r--r--lib/ic/examples/pre_post_condition/ReadMe.txt73
-rw-r--r--lib/ic/examples/pre_post_condition/ex.idl29
-rw-r--r--lib/ic/examples/pre_post_condition/m_i_impl.erl49
-rw-r--r--lib/ic/examples/pre_post_condition/tracer.erl56
42 files changed, 3151 insertions, 0 deletions
diff --git a/lib/ic/examples/all-against-all/Makefile b/lib/ic/examples/all-against-all/Makefile
new file mode 100644
index 0000000000..a71099ef72
--- /dev/null
+++ b/lib/ic/examples/all-against-all/Makefile
@@ -0,0 +1,117 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1999-2009. 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%
+#
+#
+# Point this at your version of OTP
+OTPROOT=/usr/local/otp/releases/otp_beam_sunos5_r7a
+
+# Type actual IC Version
+ICVSN=4.0.4
+
+# Type actual Erl Interface Vesrion
+EIVSN=3.2.2
+
+# Type actual Erl Interface Vesrion
+JIVSN=1.2
+
+# IDL file(s)
+IDLS=random.idl
+
+# Own C-server files
+CSRV=server callbacks
+
+# Own C-client files
+CCL=client
+
+# Generated C-server files
+GCSRVS=rmod_random__s
+
+# Generated C-server files
+GCCLS=rmod_random
+
+# Includes
+IFLAGS=-I$(OTPROOT)/lib/ic-$(ICVSN)/include \
+ -I$(OTPROOT)/lib/erl_interface-$(EIVSN)/include
+
+LDFLAGS=-L$(OTPROOT)/lib/ic-$(ICVSN)/priv/lib \
+ -L$(OTPROOT)/lib/erl_interface-$(EIVSN)/lib
+
+LDLIBS=-lic -lerl_interface -lei -lnsl -lsocket
+
+
+# Erlang compiler
+ERLC=$(OTPROOT)/bin/erlc
+
+# Erlang compiler flags.
+EFLAGS='+{scoped_op_calls,true}'
+
+# C compiler
+CC=gcc
+
+# C compiler flags
+CFLAGS=-ggdb -O2 -Wall $(IFLAGS)
+
+# Java compiler
+JAVAC=javac
+
+CLASSPATH= "./:$(OTPROOT)/lib/ic-$(ICVSN)/priv/ic.jar:$(OTPROOT)/lib/jinterface-$(JIVSN)/priv/OtpErlang.jar"
+JFLAGS=-classpath $(CLASSPATH) -O
+
+JGENJFILES = \
+ ./rmod/_randomImplBase.java \
+ ./rmod/random.java \
+ ./rmod/randomHolder.java \
+ ./rmod/_randomStub.java \
+ ./rmod/randomHelper.java
+
+
+all: server client eall jall
+
+
+server:
+ $(ERLC) $(EFLAGS) '+{be,c_server}' $(IDLS)
+ $(CC) $(IFLAGS) -c $(CSRV:=.c) $(GCSRVS:=.c)
+ $(CC) $(CSRV:=.o) $(GCSRVS:=.o) -o $@ $(LDFLAGS) $(LDLIBS)
+
+client:
+ $(ERLC) $(EFLAGS) '+{be,c_client}' $(IDLS)
+ $(CC) $(IFLAGS) -c $(CCL:=.c) $(GCCLS:=.c)
+ $(CC) $(CCL:=.o) $(GCCLS:=.o) -o $@ $(LDFLAGS) $(LDLIBS)
+
+eall:
+ $(ERLC) $(EFLAGS) '+{be,erl_genserv}' $(IDLS)
+ $(ERLC) *.erl
+
+jall:
+ $(ERLC) $(EFLAGS) '+{be,java}' $(IDLS)
+ $(JAVAC) $(JFLAGS) */*.java *.java
+
+
+clean:
+ /bin/rm -rf $(GCCLS:=.o) $(GCCLS:=.c) $(GCSRVS:=.o) $(GCSRVS:=.c) $(CCL:=.o) $(CSRV:=.o) rmod.erl rmod_random.erl *.jam *.beam oe* *.h *.hrl *~ core server client *.class
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/all-against-all/Makefile.win32 b/lib/ic/examples/all-against-all/Makefile.win32
new file mode 100644
index 0000000000..0085a85aad
--- /dev/null
+++ b/lib/ic/examples/all-against-all/Makefile.win32
@@ -0,0 +1,138 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2000-2009. 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%
+#
+#
+# Point this at your version of OTP
+OTPROOT=c:\Progra~1\erl5.0.1\
+
+# Type actual IC Version
+ICVSN=4.0.4
+
+# Type actual Erl Interface Vesrion
+EIVSN=3.2.2
+
+# Type actual Erl Interface Vesrion
+JIVSN=1.2
+
+# IDL file(s)
+IDLS=random.idl
+
+# Own C-server files
+CSRV=server.c callbacks.c
+CSRVO=server.obj callbacks.obj
+
+# Own C-client files
+CCL=client.c
+CCLO=client.obj
+
+# Generated C-server files
+GCSRVS=rmod_random__s.c
+GCSRVSO=rmod_random__s.obj
+
+# Generated C-client files
+GCCLS=rmod_random.c
+GCCLSO=rmod_random.obj
+
+# Includes
+IFLAGS=-I"$(OTPROOT)\lib\ic-$(ICVSN)\include" \
+ -I"$(OTPROOT)\lib\erl_interface-$(EIVSN)\include"
+
+LDFLAGS=/LIBPATH:"$(OTPROOT)\lib\ic-$(ICVSN)\priv\lib" \
+ /LIBPATH:"$(OTPROOT)\lib\erl_interface-$(EIVSN)\lib"
+
+LDLIBS=ic.lib erl_interface.lib ei.lib ws2_32.lib
+
+
+# Erlang compiler
+ERLC=$(OTPROOT)\bin\erlc
+
+# Erlang compiler flags.
+EFLAGS="+{scoped_op_calls,true}"
+
+
+# C compiler
+CC=cl
+
+# C compiler flags
+CFLAGS=-MT -D__WIN32__ $(IFLAGS)
+
+
+# Java compiler
+JAVAC=c:\Progra~1\jdk1.3\bin\javac
+
+# Java
+JAVA=c:\Progra~1\jdk1.3\bin\java
+
+
+# Java compiler flags
+CLASSPATH= ".;$(OTPROOT)\lib\ic-$(ICVSN)\priv\ic.jar;$(OTPROOT)\lib\jinterface-$(JIVSN)\priv\OtpErlang.jar"
+JFLAGS=-classpath $(CLASSPATH) -O
+
+
+all: server.exe client.exe client.beam client.class
+
+
+server.exe:
+ $(ERLC) $(EFLAGS) "+{be,c_server}" $(IDLS)
+ $(CC) -c $(CFLAGS) $(CSRV) $(GCSRVS)
+ $(CC) -o server.exe $(CSRVO) $(GCSRVSO) -link $(LDFLAGS) $(LDLIBS)
+
+
+client.exe:
+ $(ERLC) $(EFLAGS) "+{be,c_client}" $(IDLS)
+ $(CC) -c $(CFLAGS) $(CCL) $(GCCLS)
+ $(CC) -o client.exe $(CCLO) $(GCCLSO) -link $(LDFLAGS) $(LDLIBS)
+
+client.beam:
+ $(ERLC) $(EFLAGS) "+{be,erl_genserv}" $(IDLS)
+ $(ERLC) *.erl
+
+client.class:
+ $(ERLC) $(EFLAGS) "+{be,java}" $(IDLS)
+ $(JAVAC) $(JFLAGS) rmod/*.java
+ $(JAVAC) $(JFLAGS) *.java
+
+jclient.run:
+ $(JAVA) -classpath $(CLASSPATH) client
+
+jserver.run:
+ $(JAVA) -classpath $(CLASSPATH) server
+
+
+clean:
+ -@del /f /q rmod
+ -@rmdir rmod
+ -@del *.jam
+ -@del *.beam
+ -@del oe*
+ -@del *.h
+ -@del *.hrl
+ -@del server.exe
+ -@del client.exe
+ -@del *.obj
+ -@del rmod_random*.c
+ -@del *~
+ -@del *class
+ -@del rmod.erl
+ -@del rmod_random.erl
+
+
+
+
+
+
diff --git a/lib/ic/examples/all-against-all/ReadMe b/lib/ic/examples/all-against-all/ReadMe
new file mode 100644
index 0000000000..7503291344
--- /dev/null
+++ b/lib/ic/examples/all-against-all/ReadMe
@@ -0,0 +1,122 @@
+This is a short description on the use of Erlang,C or Java
+client and servers against each other.
+The base is a client that initiates and uses a random number
+generator that lies on an server.
+
+There are two make files, one for Unix and one for Windows,
+the Unix make file is just named "Makefile", while the Windows
+is named "Makefile.win32".
+
+Instructions.
+
+1) On Makefile :
+ * Modify the OTPROOT variable on the Makefile to point
+ to the root for your erlang instalation.
+ * Modify IC and Erl_Interface versions to agree your
+ OTP version.
+
+2) Type "make" to build the example.
+
+
+3) Start the empd deamon by using the command :
+
+ epmd -daemon
+
+
+4) Do this when you want to run :
+
+ * an Erlang server.
+
+ Start erlang with the options
+
+ -setcookie <Some Cookie> -sname <SomeNodeName>
+
+ In this example you should use :
+
+ erl -setcookie flash -sname babbis
+
+ * a C server.
+
+ Just type :
+
+ server
+
+ * a Java server.
+
+ Set and export the CLASSPATH variable to
+ point to the java classes located in java development kit,
+ the Otp's classes and the current directory.
+ Your classpath should look like this :
+
+ .:<OTPROOT>/lib/ic-3.8.1/priv/ic.jar:<OTPROOT>/lib/jinterface_0.9.2/priv/OtpErlang.jar
+
+ where :
+
+ <OTPROOT> is the location there OTP is installed
+
+ Then type :
+
+ java server
+
+
+5) Do this when you want to run :
+
+ * an Erlang client.
+
+ ** If you have no valid named erlang node,
+ start erlang with the options
+
+ -setcookie <Some Cookie> -sname <SomeNodeName>
+
+ In this example you should use :
+
+ erl -setcookie flash -sname client
+
+ On the erlang shell, type
+
+ client:start().
+
+ ** If you have a valid named erlang node, started
+ whith the same "cookie", on the erlang shell, type
+
+ client:start().
+
+
+ * a C client, just type
+
+ client
+
+
+ * a Java client.
+
+
+ Set and export the CLASSPATH variable to
+ point to the java classes located in java development kit,
+ the Otp's classes and the current directory.
+ Your classpath should look like this :
+
+ .:<OTPROOT>/lib/ic-4.0/priv/ic.jar:<OTPROOT>/lib/jinterface_1.1/priv/OtpErlang.jar
+
+ where :
+
+ <OTPROOT> is the location there OTP is installed
+
+ Then type :
+
+ java client
+
+
+
+6) Please note that :
+
+ * you must always have the same cookie in order to eastablish connection
+ between clients and servers.
+
+ * you cannot start two servers with the same name.
+ In this example all servers share the same name in order to test
+ several constallations. Kill a server before starting another one.
+
+
+
+
+
diff --git a/lib/ic/examples/all-against-all/callbacks.c b/lib/ic/examples/all-against-all/callbacks.c
new file mode 100644
index 0000000000..f8642f4d2e
--- /dev/null
+++ b/lib/ic/examples/all-against-all/callbacks.c
@@ -0,0 +1,45 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+
+#include <stdlib.h>
+#include "rmod_random__s.h"
+
+
+rmod_random_produce__rs*
+rmod_random_produce__cb(rmod_random oe_obj, double *rs, CORBA_Environment *oe_env)
+
+{
+ *rs = (double) rand();
+
+ return (rmod_random_produce__rs*) NULL;
+}
+
+
+rmod_random_init__rs*
+rmod_random_init__cb(rmod_random oe_obj, long* seed1, long* seed2, long* seed3, CORBA_Environment *oe_env)
+
+{
+ srand(*seed1 * *seed2 * *seed3);
+
+ return (rmod_random_init__rs*) NULL;
+}
+
+
+
diff --git a/lib/ic/examples/all-against-all/client.c b/lib/ic/examples/all-against-all/client.c
new file mode 100644
index 0000000000..e0a52b142d
--- /dev/null
+++ b/lib/ic/examples/all-against-all/client.c
@@ -0,0 +1,153 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+
+/* Just include the interface function */
+#include "rmod_random.h"
+
+
+/* Assign your own node name here */
+#define CLNODENAME "c50"
+#define SNODENAME "babbis"
+#define SREGNAME "rmod_random_impl"
+#define COOKIE "flash"
+#define INBUFSZ 1024
+#define OUTBUFSZ 1024
+#define HOSTNAMESZ 256
+
+
+
+/* Stopping node */
+void client_exit(CORBA_Environment *env) {
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+
+ erl_close_connection(env->_fd);
+ exit(1);
+}
+
+
+int main(){
+
+ double result=0;
+ int i=0;
+ int error = 0;
+ erlang_pid pid;
+ char host[HOSTNAMESZ];
+ char server_node[HOSTNAMESZ];
+ char client_node[HOSTNAMESZ];
+ CORBA_Environment *env;
+
+ /* Initiate names */
+#ifdef __WIN32__
+ WORD wVersionRequested;
+ WSADATA wsaData;
+
+ wVersionRequested = MAKEWORD(1, 1);
+ if ((error = WSAStartup(wVersionRequested, &wsaData))) {
+ fprintf(stderr,"Can't initialize windows sockets: %d",error);
+ return 0;
+ }
+#endif
+ error = gethostname(host,HOSTNAMESZ);
+ if (error) {
+#ifdef __WIN32__
+ fprintf(stderr,"can't find own hostname (error = %ld) !\n",WSAGetLastError());
+#else /* not __WIN32__ */
+ fprintf(stderr,"can't find own hostname !\n");
+#endif
+ }
+ sprintf(client_node,"%s@%s",CLNODENAME,host);
+ sprintf(server_node,"%s@%s",SNODENAME,host);
+
+ /* Create and init CORBA_Environment */
+ env = CORBA_Environment_alloc(INBUFSZ,OUTBUFSZ);
+
+ /* Initiating the connection */
+ erl_init(NULL,0);
+ erl_connect_init(50,COOKIE,0);
+
+ /* Initiating pid*/
+ strcpy(pid.node,client_node);
+ pid.num = 99;
+ pid.serial = 0;
+ pid.creation = 0;
+
+ /* Fixing environment variable */
+ env->_fd=erl_connect(server_node);
+ strcpy(env->_regname,SREGNAME);
+ env->_to_pid = NULL;
+ env->_from_pid = &pid;
+
+ if (env->_fd < 0) {
+ fprintf(stderr,"Error : Cannot connect to Server\n");
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+ exit(1);
+ }
+
+ /* Calling the init function */
+ rmod_random_init(NULL, 1, 2, 3, env);
+
+ switch(env->_major) {
+ case CORBA_NO_EXCEPTION: /* Success */
+ printf("Init complete !\n");
+ break;
+ case CORBA_SYSTEM_EXCEPTION: /* System exception */
+ printf("Init call failure, reason : %s\n",(char *) CORBA_exception_value(env));
+ CORBA_exception_free(env);
+ client_exit(env);
+ default: /* Should not come here */
+ client_exit(env);
+ }
+
+ /* Calling the produce function */
+ for(i=1; i<=10; i++) {
+ result = rmod_random_produce(NULL, env);
+
+ switch(env->_major) {
+ case CORBA_NO_EXCEPTION: /* Success */
+ break;
+ case CORBA_SYSTEM_EXCEPTION: /* System exception */
+ printf("Init call failure, reason : %s\n",(char *) CORBA_exception_value(env));
+ CORBA_exception_free(env);
+ client_exit(env);
+ default: /* Should not come here */
+ client_exit(env);
+ }
+
+ printf("the random number nr%d is %f\n",i,result);
+ }
+
+ /* Closing the connection */
+ erl_close_connection(env->_fd);
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+
+ return 0;
+}
diff --git a/lib/ic/examples/all-against-all/client.erl b/lib/ic/examples/all-against-all/client.erl
new file mode 100644
index 0000000000..921c2c91ea
--- /dev/null
+++ b/lib/ic/examples/all-against-all/client.erl
@@ -0,0 +1,53 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2009. 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%
+%%
+%%
+%%----------------------------------------------------------------------
+%% File : client.erl
+%% Purpose :
+%%----------------------------------------------------------------------
+
+-module(client).
+
+-export([produce/0,init/3,call/0]).
+
+-define(SERVER,{rmod_random_impl,
+ list_to_atom("babbis@"++hd(tl(string:tokens(atom_to_list(node()),"@"))))}).
+-define(CLIENTMOD,'rmod_random').
+
+produce() ->
+ ?CLIENTMOD:produce(?SERVER).
+
+
+init(Seed1, Seed2, Seed3) ->
+ io:format("Init..."),
+ ?CLIENTMOD:init(?SERVER,Seed1, Seed2, Seed3),
+ io:format("ok\n").
+
+
+call() ->
+ init(1,2,3),
+ produce(0).
+
+
+produce(10) ->
+ ok;
+produce(Ctr) ->
+ N = produce(),
+ io:format("Random~p = ~p\n",[Ctr,N]),
+ produce(Ctr+1).
diff --git a/lib/ic/examples/all-against-all/client.java b/lib/ic/examples/all-against-all/client.java
new file mode 100644
index 0000000000..4dc88cffbb
--- /dev/null
+++ b/lib/ic/examples/all-against-all/client.java
@@ -0,0 +1,60 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+public class client {
+
+ private static java.lang.String SNode = "client";
+ private static java.lang.String PNode = "babbis";
+ private static java.lang.String Cookie = "flash";
+ private static java.lang.String Server = "rmod_random_impl";
+
+ private static rmod._randomStub stub;
+
+ public static void main(String[] args) {
+
+ try {
+
+ stub = new rmod._randomStub(SNode,PNode,Cookie,Server);
+ int seed1 = 1;
+ int seed2 = 2;
+ int seed3 = 3;
+ double random = 0;
+
+ System.out.print("\nClient initialization....");
+ stub.init(seed1,seed2,seed3);
+ System.out.println("ok\n");
+
+
+ for (int i = 0; i < 10; i++) {
+ random = stub.produce();
+ System.out.println("Random" + i + " = " + random);
+ }
+ System.out.println("\nClient terminated.\n");
+
+ stub.__disconnect();
+
+ } catch( Exception e) {
+ System.out.println("Exception :");
+ e.printStackTrace();
+ }
+
+ }
+
+}
+
diff --git a/lib/ic/examples/all-against-all/random.idl b/lib/ic/examples/all-against-all/random.idl
new file mode 100644
index 0000000000..b44f7379f6
--- /dev/null
+++ b/lib/ic/examples/all-against-all/random.idl
@@ -0,0 +1,50 @@
+// ``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 via the world wide web 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.
+//
+// The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+// AB. All Rights Reserved.''
+//
+// $Id$
+//
+
+#ifndef _RANDOM_IDL
+#define _RANDOM_IDL
+
+module rmod {
+
+ interface random {
+
+ double produce();
+
+ oneway void init(in long seed1, in long seed2, in long seed3);
+
+ };
+
+};
+
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/all-against-all/rmod_random_impl.erl b/lib/ic/examples/all-against-all/rmod_random_impl.erl
new file mode 100644
index 0000000000..8113cfb768
--- /dev/null
+++ b/lib/ic/examples/all-against-all/rmod_random_impl.erl
@@ -0,0 +1,48 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2000-2009. 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%
+%%
+%%
+-module(rmod_random_impl).
+-export([init/1, terminate/2]).
+-export([produce/1,init/4]).
+
+
+init(Env) ->
+ {ok, []}.
+
+terminate(From, Reason) ->
+ ok.
+
+
+produce(_Random) ->
+ case catch random:uniform() of
+ {'EXIT',_} ->
+ true;
+ RUnif ->
+ {reply,RUnif,[]}
+ end.
+
+
+init(_Random,S1,S2,S3) ->
+ case catch random:seed(S1,S2,S3) of
+ {'EXIT',_} ->
+ true;
+ _ ->
+ {noreply,[]}
+ end.
+
diff --git a/lib/ic/examples/all-against-all/server.c b/lib/ic/examples/all-against-all/server.c
new file mode 100644
index 0000000000..be4953e9b9
--- /dev/null
+++ b/lib/ic/examples/all-against-all/server.c
@@ -0,0 +1,261 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#ifdef __WIN32__
+#include <winsock2.h>
+#include <direct.h>
+#include <windows.h>
+#include <winbase.h>
+#else /* not __WIN32__ */
+#include <errno.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#endif
+#include "rmod_random__s.h"
+
+/* Used functions */
+static int getport(int sockd);
+static int getlisten(int port);
+static int init(int *sd, int *portnr, int *epmd_fd);
+void terminate(int *fd, int *sd, int *epmd_fd);
+static void server_loop(int fd, int sd);
+
+/* change these, or even better, make command-line args to program... */
+#define COOKIE "flash"
+#define SERVER "babbis"
+#define NODENAMESZ 512
+#define HOSTNAMESZ 256
+#define INBUFSZ 1024
+#define OUTBUFSZ 1024
+
+
+int main(int argc, char **argv)
+{
+ int sd;
+ int portnr;
+ int epmd_fd;
+
+ /* crate file descriptors */
+ if (init(&sd, &portnr, &epmd_fd) < 0)
+ return -1;
+
+ /* start server loop */
+ server_loop(sd,epmd_fd);
+
+ return 0;
+}
+
+
+
+static void server_loop(int sd, int epmd_fd)
+{
+ ErlConnect conn;
+ erlang_msg msg;
+ int status=1;
+ CORBA_Environment *env;
+
+ /* Create and init CORBA_Environment */
+ env = CORBA_Environment_alloc(INBUFSZ,OUTBUFSZ);
+
+ while (status >= 0) {
+
+ status = 1;
+
+ if ((env->_fd = erl_accept(sd,&conn)) < 0) {
+ /* error */
+ fprintf(stderr,"Accept failed: %s\n",strerror(errno));
+ }
+ else {
+ /* connection */
+ fprintf(stderr,"Accepted connection from %s\n",conn.nodename);
+
+ while (status >= 0) {
+
+ /* write message to buffer */
+ status = ei_receive_encoded(env->_fd, &env->_inbuf, &env->_inbufsz, &msg, &env->_iin);
+ switch(status) {
+ case ERL_SEND:
+ case ERL_REG_SEND :
+ /* do transaction with fd */
+ rmod_random__switch(NULL,env);
+
+ switch(env->_major) {
+ case CORBA_NO_EXCEPTION: /* Success */
+ break;
+ case CORBA_SYSTEM_EXCEPTION: /* System exception */
+ printf("Request failure, reason : %s\n",(char *) CORBA_exception_value(env));
+ CORBA_exception_free(env);
+ break;
+ default: /* Should not come here */
+ CORBA_exception_free(env);
+ break;
+ }
+
+ /* send outdata */
+ if (env->_iout > 0)
+ ei_send_encoded(env->_fd,&env->_caller,env->_outbuf,env->_iout);
+ break;
+
+ case ERL_TICK :
+ break;
+ default : /* < 0 */
+ printf("Connection terminated\n");
+ break;
+ }
+ }
+ }
+ status=0; /* restart */
+ }
+
+ /* close file descriptors */
+ terminate(&env->_fd, &sd, &epmd_fd);
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+}
+
+
+
+static int init(int *sd, int *portnr, int *epmd_fd)
+{
+ char host[HOSTNAMESZ];
+ char servernode[NODENAMESZ];
+ struct hostent *h;
+ int error = 0;
+
+#ifdef __WIN32__
+ WORD wVersionRequested;
+ WSADATA wsaData;
+
+ wVersionRequested = MAKEWORD(1, 1);
+ if ((error = WSAStartup(wVersionRequested, &wsaData))) {
+ fprintf(stderr,"Can't initialize windows sockets: %d",error);
+ }
+#endif
+ /* get the host name */
+ error = gethostname(host,HOSTNAMESZ);
+ if (error) {
+#ifdef __WIN32__
+ fprintf(stderr,"can't find own hostname (error = %ld) !\n",WSAGetLastError());
+#else /* not __WIN32__ */
+ fprintf(stderr,"can't find own hostname !\n");
+#endif
+ }
+ else {
+ /* identify host */
+ if (!(h = erl_gethostbyname(host)))
+ fprintf(stdout,"can't find own ip address\n");
+ else {
+
+ /* get a listen port. 0 means let system choose port number */
+ *sd = getlisten(0);
+
+ /* what port did we get? */
+ /* this call not necessary if we specified port in call to getlisten() */
+ *portnr = getport(*sd);
+
+ /* make the nodename server@host */
+ sprintf(servernode,"%s@%s",SERVER,host);
+
+ /* initiate */
+ erl_init(NULL,0);
+
+ /* host, alive, alive@host, addr, cookie, creation */
+ erl_connect_xinit(host,SERVER,servernode,(Erl_IpAddr)(h->h_addr_list[0]),COOKIE,0);
+
+ /* let epmd know we are here */
+ *epmd_fd = erl_publish(*portnr);
+
+ return 0;
+ }
+ }
+ return -1;
+}
+
+
+void terminate(int *fd, int *sd, int *epmd_fd) {
+
+ close(*fd);
+
+ /* remove info from epnd */
+ close(*epmd_fd);
+
+ /* return socket */
+ close(*sd);
+
+}
+
+
+
+/* tells you what port you are using on given socket */
+static int getport(int sockd)
+{
+ struct sockaddr_in addr;
+ int namelen = sizeof(addr);
+ int i;
+
+ memset(&addr,0,sizeof(addr));
+
+ if ((i = getsockname(sockd,(struct sockaddr *)&addr,&namelen))<0)
+ return i;
+
+ return ntohs(addr.sin_port);
+}
+
+
+
+/* return a listen socket, bound to given port */
+/* specify port = 0 to let system assign port */
+static int getlisten(int port)
+{
+ int sockd;
+ struct sockaddr_in inaddr;
+ int opt = 1;
+ int i;
+
+ /* get listen socket */
+ if ((sockd = socket(AF_INET,SOCK_STREAM,0)) < 0) return sockd;
+
+ if ((i=setsockopt(sockd,SOL_SOCKET,SO_REUSEADDR,(void *)&opt,sizeof(opt)))<0)
+ return i;
+
+ /* bind to requested port */
+ memset(&inaddr,0,sizeof(inaddr));
+ inaddr.sin_family = AF_INET;
+ inaddr.sin_addr.s_addr = htonl(INADDR_ANY);
+ inaddr.sin_port = htons(port);
+
+ if ((i = bind(sockd,(struct sockaddr*) &inaddr, sizeof(inaddr))) < 0)
+ return i;
+
+ listen(sockd,5);
+
+ return sockd;
+}
+
diff --git a/lib/ic/examples/all-against-all/server.erl b/lib/ic/examples/all-against-all/server.erl
new file mode 100644
index 0000000000..24ace2e598
--- /dev/null
+++ b/lib/ic/examples/all-against-all/server.erl
@@ -0,0 +1,40 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2009. 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%
+%%
+%%
+-module(server).
+-export([start/0]).
+
+
+
+%% This starts up the random number server
+start() ->
+ %% Start the gen server
+ {ok,Pid} = rmod_random:oe_create([],{local,'rmod_random_impl'}),
+ true.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/all-against-all/server.java b/lib/ic/examples/all-against-all/server.java
new file mode 100644
index 0000000000..6b5fe8fcfd
--- /dev/null
+++ b/lib/ic/examples/all-against-all/server.java
@@ -0,0 +1,82 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+public class server {
+
+ private static java.lang.String SNode = "babbis";
+ private static java.lang.String Cookie = "flash";
+ private static java.lang.String RegName = "rmod_random_impl";
+
+ public static void main(String[] args) {
+
+
+ System.out.println("\nServer running.\n");
+ boolean serverState = true;
+ boolean recState = true;
+
+ try {
+
+ com.ericsson.otp.erlang.OtpServer self = new com.ericsson.otp.erlang.OtpServer(SNode, Cookie);
+ self.publishPort();
+
+ /* Server loop */
+ while(serverState == true) {
+
+ com.ericsson.otp.erlang.OtpConnection connection = self.accept();
+ serverImpl srv = new serverImpl();
+ com.ericsson.otp.erlang.OtpInputStream request;
+ com.ericsson.otp.erlang.OtpOutputStream reply;
+ com.ericsson.otp.erlang.OtpErlangPid client;
+
+ /* Server loop */
+ while(recState == true) {
+
+ if (connection.isConnected() == true)
+ try {
+
+ request = connection.receiveBuf();
+
+ reply = srv.invoke(request);
+
+ if (reply != null) {
+ client = srv.__getCallerPid();
+
+ connection.sendBuf(client,reply);
+ }
+
+ } catch( Exception e) {
+ System.out.println("Server terminated.\n\n");
+ recState = false;
+ serverState = false;
+ }
+ }
+
+ connection.close();
+ }
+
+ } catch( Exception e) {
+ System.out.println("Initialization exception :");
+ e.printStackTrace();
+ }
+ }
+}
+
+
+
+
diff --git a/lib/ic/examples/all-against-all/serverImpl.java b/lib/ic/examples/all-against-all/serverImpl.java
new file mode 100644
index 0000000000..d5fb66e96b
--- /dev/null
+++ b/lib/ic/examples/all-against-all/serverImpl.java
@@ -0,0 +1,42 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+public class serverImpl extends rmod._randomImplBase {
+
+ java.util.Random random = null;
+
+
+ public void init(int seed1, int seed2, int seed3) throws java.lang.Exception {
+
+ random = new java.util.Random(seed1+seed2+seed3);
+ };
+
+
+ public double produce() throws java.lang.Exception {
+
+ return random.nextDouble();
+ }
+
+}
+
+
+
+
+
+
diff --git a/lib/ic/examples/c-client/Makefile b/lib/ic/examples/c-client/Makefile
new file mode 100644
index 0000000000..7c57e4f7ed
--- /dev/null
+++ b/lib/ic/examples/c-client/Makefile
@@ -0,0 +1,86 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1998-2009. 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%
+#
+#
+# Point this at your version of OTP
+OTPROOT=/usr/local/otp/daily_build/otp_beam_sunos5_r8a.latest
+
+# Type actual IC Version
+ICVSN=4.1.1
+
+# Type actual Erl Interface Vesrion
+EIVSN=3.3.0
+
+# IDL file(s)
+IDLS=random.idl
+
+# Own C-client files
+CCL=client
+
+# Generated C-server files
+GCCLS=oe_code_seed rmod_random
+
+# Includes
+IFLAGS=-I$(OTPROOT)/lib/ic-$(ICVSN)/include \
+ -I$(OTPROOT)/lib/erl_interface-$(EIVSN)/include
+
+LDFLAGS=-L$(OTPROOT)/lib/ic-$(ICVSN)/priv/lib \
+ -L$(OTPROOT)/lib/erl_interface-$(EIVSN)/lib
+
+LDLIBS=-lic -lerl_interface -lei -lnsl -lsocket
+
+
+# Erlang compiler
+ERLC=$(OTPROOT)/bin/erlc
+
+# Erlang compiler flags.
+EFLAGS='+{preproc_flags,"-I $(OTPROOT)/usr/include"}' '+{scoped_op_calls,true}'
+
+
+# C compiler
+CC=gcc
+
+# C compiler flags
+CFLAGS=-ggdb -O2 -Wall $(IFLAGS)
+
+
+all: server client
+
+
+server:
+ $(ERLC) $(EFLAGS) '+{be,erl_genserv}' $(IDLS)
+ $(ERLC) *.erl
+
+client:
+ $(ERLC) $(EFLAGS) '+{be,c_client}' $(IDLS)
+ $(CC) $(IFLAGS) -c $(CCL:=.c) $(GCCLS:=.c)
+ $(CC) $(CCL:=.o) $(GCCLS:=.o) -o $@ $(LDFLAGS) $(LDLIBS)
+
+
+
+clean:
+ /bin/rm -f $(GCCLS:=.o) $(GCCLS:=.c) $(CCL:=.o) *.jam *.beam oe* rmod_random.erl *.h *.hrl *~ core client
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/c-client/ReadMe b/lib/ic/examples/c-client/ReadMe
new file mode 100644
index 0000000000..28372c3be2
--- /dev/null
+++ b/lib/ic/examples/c-client/ReadMe
@@ -0,0 +1,46 @@
+This is a short description on the use of the c-client demo,
+a client that initiates and uses a random number generator
+that lies on an Erlang-genserver.
+
+Instructions.
+
+1) On Makefile :
+ * Modify the OTPROOT variable on the Makefile to point
+ to the root for your erlang instalation.
+ * Modify IC and Erl_Interface versions to agree your
+ OTP version.
+
+2) Type "make" to build the example.
+
+
+3) Start erlang with the options
+ -setcookie <Some Cookie> -sname <SomeNodeName>
+
+ In this example you should use :
+
+ erl -setcookie flash -sname babbis
+
+
+4) On the erlang shell type :
+ --------------------------
+
+ rmod_random:oe_create([],{local,rmod_random_impl}). ( initializes the server )
+
+ or
+
+ test:start().
+
+
+ Then start a new terminal window and type :
+ -------------------------------------------
+
+ client ( calls the client )
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/c-client/client.c b/lib/ic/examples/c-client/client.c
new file mode 100644
index 0000000000..816477cf15
--- /dev/null
+++ b/lib/ic/examples/c-client/client.c
@@ -0,0 +1,130 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1998-2009. 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%
+ *
+ */
+
+/* Include the interface function and ei_connect */
+#include "rmod_random.h"
+#include "ei_connect.h"
+
+/* Assign your own node name here */
+#define SNODE "babbis@balin"
+#define SERVER "rmod_random_impl"
+#define COOKIE "flash"
+#define CLNODE "c47@balin"
+#define INBUFSZ 1024
+#define OUTBUFSZ 1024
+
+/* Stopping node */
+void client_exit(CORBA_Environment *env) {
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+
+ close(env->_fd);
+ exit(1);
+}
+
+int main()
+{
+ double result=0;
+ int i=0;
+ erlang_pid pid;
+ CORBA_Environment *env;
+ seed idata;
+ ei_cnode ec;
+
+ /* Create and init CORBA_Environment */
+ env = CORBA_Environment_alloc(INBUFSZ,OUTBUFSZ);
+
+ /* Initialize seed */
+ idata.seed1 = 1;
+ idata.seed2 = 2;
+ idata.seed3 = 3;
+
+ /* Initiating the connection */
+ ei_connect_init(&ec, "c47", COOKIE, 0);
+
+ /* Initiating pid*/
+ strcpy(pid.node,CLNODE);
+ pid.num = 99;
+ pid.serial = 0;
+ pid.creation = 0;
+
+ /* Fixing environment variable */
+ env->_fd = ei_connect(&ec, SNODE);
+ strcpy(env->_regname, SERVER);
+ env->_to_pid = NULL;
+ env->_from_pid = &pid;
+
+ if (env->_fd < 0) {
+ fprintf(stderr,"Error : Cannot connect to Server\n");
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+ exit(1);
+ }
+
+ /* Calling the init function */
+ rmod_random_init(NULL, &idata, env);
+
+ switch(env->_major) {
+ case CORBA_NO_EXCEPTION: /* Success */
+ printf("Init complete !\n");
+ break;
+ case CORBA_SYSTEM_EXCEPTION: /* System exception */
+ printf("Init call failure, reason : %s\n",(char *) CORBA_exception_value(env));
+ CORBA_exception_free(env);
+ client_exit(env);
+ default: /* Should not come here */
+ client_exit(env);
+ }
+
+ /* Calling the produce function */
+ for(i=1; i<=10; i++) {
+ result = rmod_random_produce(NULL, env);
+
+ switch(env->_major) {
+ case CORBA_NO_EXCEPTION: /* Success */
+ break;
+ case CORBA_SYSTEM_EXCEPTION: /* System exception */
+ printf("Init call failure, reason : %s\n",(char *) CORBA_exception_value(env));
+ CORBA_exception_free(env);
+ client_exit(env);
+ default: /* Should not come here */
+ client_exit(env);
+ }
+
+ printf("the random number nr%d is %f\n",i,result);
+ }
+
+ /* Closing the connection */
+ close(env->_fd);
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+
+ return 0;
+}
+
diff --git a/lib/ic/examples/c-client/random.idl b/lib/ic/examples/c-client/random.idl
new file mode 100644
index 0000000000..cfe38e32d8
--- /dev/null
+++ b/lib/ic/examples/c-client/random.idl
@@ -0,0 +1,51 @@
+// ``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 via the world wide web 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.
+//
+// The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+// AB. All Rights Reserved.''
+//
+// $Id$
+//
+#ifndef _RANDOM_IDL
+#define _RANDOM_IDL
+
+struct seed {
+ long seed1;
+ long seed2;
+ long seed3;
+};
+
+module rmod {
+
+ interface random {
+
+ double produce();
+
+ oneway void init(in seed idata);
+
+ };
+
+};
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/c-client/rmod_random_impl.erl b/lib/ic/examples/c-client/rmod_random_impl.erl
new file mode 100644
index 0000000000..863e3e8c24
--- /dev/null
+++ b/lib/ic/examples/c-client/rmod_random_impl.erl
@@ -0,0 +1,52 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. 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%
+%%
+%%
+-module('rmod_random_impl').
+-include("oe_random.hrl").
+-export([init/1, terminate/2]).
+-export([produce/1,init/2]).
+
+
+init(Env) ->
+ {ok, []}.
+
+terminate(From, Reason) ->
+ ok.
+
+
+produce(_Random) ->
+ case catch random:uniform() of
+ {'EXIT',_} ->
+ true;
+ RUnif ->
+ {reply,RUnif,[]}
+ end.
+
+
+init(_Random,IData) ->
+ S1 = IData#seed.seed1,
+ S2 = IData#seed.seed2,
+ S3 = IData#seed.seed3,
+ case catch random:seed(S1,S2,S3) of
+ {'EXIT',_} ->
+ true;
+ _ ->
+ {noreply,[]}
+ end.
+
diff --git a/lib/ic/examples/c-client/test.erl b/lib/ic/examples/c-client/test.erl
new file mode 100644
index 0000000000..0a05ce2944
--- /dev/null
+++ b/lib/ic/examples/c-client/test.erl
@@ -0,0 +1,43 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. 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%
+%%
+%%
+% Start Erlang with : erl -sname <your name> -setcookie <your cookie>
+
+-module(test).
+
+-export([start/0,exec/0]).
+
+
+start() ->
+ io:format("Starting server~n"),
+ rmod_random:oe_create([],{local,'rmod_random_impl'}).
+
+exec() ->
+ io:format("Running client~n"),
+ OutPut = os:cmd("client"),
+ io:format("~s",[OutPut]).
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/c-server/Makefile b/lib/ic/examples/c-server/Makefile
new file mode 100644
index 0000000000..caf4306932
--- /dev/null
+++ b/lib/ic/examples/c-server/Makefile
@@ -0,0 +1,89 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1998-2009. 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%
+#
+#
+# Point this at your version of OTP
+OTPROOT=/usr/local/otp/daily_build/otp_beam_sunos5_r8a.latest
+
+# Type actual IC Version
+ICVSN=4.1.1
+
+# Type actual Erl Interface Vesrion
+EIVSN=3.3.0
+
+# IDL file(s)
+IDLS=random.idl
+
+# Own C-server files
+CSRV=server callbacks
+
+# Own C-client files
+CCL=client
+
+# Generated C-server files
+GCSRVS=rmod_random__s
+
+# Generated C-server files
+GCCLS=rmod_random
+
+# Includes
+IFLAGS=-I$(OTPROOT)/lib/ic-$(ICVSN)/include \
+ -I$(OTPROOT)/lib/erl_interface-$(EIVSN)/include
+
+LDFLAGS=-L$(OTPROOT)/lib/ic-$(ICVSN)/priv/lib \
+ -L$(OTPROOT)/lib/erl_interface-$(EIVSN)/lib
+
+LDLIBS=-lic -lerl_interface -lei -lnsl -lsocket
+
+
+# Erlang compiler
+ERLC=$(OTPROOT)/bin/erlc
+
+# Erlang compiler flags.
+EFLAGS='+{preproc_flags,"-I $(OTPROOT)/usr/include"}' '+{scoped_op_calls,true}'
+
+
+# C compiler
+CC=gcc
+
+# C compiler flags
+CFLAGS=-ggdb -O2 -Wall $(IFLAGS)
+
+
+all: server client erlclient
+
+
+server:
+ $(ERLC) $(EFLAGS) '+{be,c_server}' $(IDLS)
+ $(CC) $(IFLAGS) -c $(CSRV:=.c) $(GCSRVS:=.c)
+ $(CC) $(CSRV:=.o) $(GCSRVS:=.o) -o $@ $(LDFLAGS) $(LDLIBS)
+
+client:
+ $(ERLC) $(EFLAGS) '+{be,c_client}' $(IDLS)
+ $(CC) $(IFLAGS) -c $(CCL:=.c) $(GCCLS:=.c)
+ $(CC) $(CCL:=.o) $(GCCLS:=.o) -o $@ $(LDFLAGS) $(LDLIBS)
+
+erlclient:
+ $(ERLC) $(EFLAGS) '+{be,erl_genserv}' $(IDLS)
+ $(ERLC) *.erl
+
+
+clean:
+ /bin/rm -f $(GCCLS:=.o) $(GCCLS:=.c) $(GCSRVS:=.o) $(GCSRVS:=.c) $(CCL:=.o) $(CSRV:=.o) *.jam *.beam oe* *.h *.hrl *~ core server client
+
+
diff --git a/lib/ic/examples/c-server/ReadMe b/lib/ic/examples/c-server/ReadMe
new file mode 100644
index 0000000000..69fce4cd07
--- /dev/null
+++ b/lib/ic/examples/c-server/ReadMe
@@ -0,0 +1,45 @@
+This is a short description on the use of the client demo,
+a client that initiates and uses a random number generator
+that lies on a C-server.
+
+Instructions.
+
+1) Modify the OTPROOT variable on the Makefile to point
+ to the root for your erlang instalation.
+ Modify IC and Erl_Interface versions to agree your
+ OTP version.
+
+2)
+ Type :
+ ------
+
+ make ( generates and compiles all code )
+
+ server ( starts the c-server )
+
+
+ To test the c-client against the c-server start a new terminal window and type :
+ --------------------------------------------------------------------------------
+
+ client ( calls the server )
+
+
+ To test the erlang-client against the c-server start a new terminal window and type :
+ -------------------------------------------------------------------------------------
+
+
+ erl -sname client -setcookie flash ( start erlang )
+
+ client:init(1,2,3). ( initiates the random generator )
+
+ client:produce(). ( calls the random generator )
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/c-server/callbacks.c b/lib/ic/examples/c-server/callbacks.c
new file mode 100644
index 0000000000..d50d26ced1
--- /dev/null
+++ b/lib/ic/examples/c-server/callbacks.c
@@ -0,0 +1,45 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1998-2009. 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%
+ *
+ */
+
+#include <stdlib.h>
+#include "rmod_random__s.h"
+
+
+rmod_random_produce__rs*
+rmod_random_produce__cb(rmod_random oe_obj, double *rs, CORBA_Environment *oe_env)
+
+{
+ *rs = (double) rand();
+
+ return (rmod_random_produce__rs*) NULL;
+}
+
+
+rmod_random_init__rs*
+rmod_random_init__cb(rmod_random oe_obj, long* seed1, long* seed2, long* seed3, CORBA_Environment *oe_env)
+
+{
+ srand(*seed1 * *seed2 * *seed3);
+
+ return (rmod_random_init__rs*) NULL;
+}
+
+
+
diff --git a/lib/ic/examples/c-server/client.c b/lib/ic/examples/c-server/client.c
new file mode 100644
index 0000000000..fa570089b5
--- /dev/null
+++ b/lib/ic/examples/c-server/client.c
@@ -0,0 +1,124 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1998-2009. 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%
+ *
+ */
+
+/* Include the interface function, and ei_connect */
+#include "rmod_random.h"
+#include "ei_connect.h"
+
+/* Assign your own node name here */
+#define SNODE "babbis@balin"
+#define SERVER "rmod_random_impl"
+#define COOKIE "flash"
+#define CLNODE "c47@balin"
+#define INBUFSZ 1024
+#define OUTBUFSZ 1024
+
+/* Stopping node */
+void client_exit(CORBA_Environment *env) {
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+
+ close(env->_fd);
+ exit(1);
+}
+
+int main()
+{
+ double result=0;
+ int i=0;
+ erlang_pid pid;
+ CORBA_Environment *env;
+ ei_cnode ec;
+
+ /* Create and init CORBA_Environment */
+ env = CORBA_Environment_alloc(INBUFSZ,OUTBUFSZ);
+
+ /* Initiating the connection */
+ ei_connect_init(&ec, "c47", COOKIE, 0);
+
+ /* Initiating pid*/
+ strcpy(pid.node, CLNODE);
+ pid.num = 99;
+ pid.serial = 0;
+ pid.creation = 0;
+
+ /* Fixing environment variable */
+ env->_fd = ei_connect(&ec, SNODE);
+ strcpy(env->_regname,SERVER);
+ env->_to_pid = NULL;
+ env->_from_pid = &pid;
+
+ if (env->_fd < 0) {
+ fprintf(stderr,"Error : Cannot connect to Server\n");
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+ exit(1);
+ }
+
+ /* Calling the init function */
+ rmod_random_init(NULL, 1, 2, 3, env);
+
+ switch(env->_major) {
+ case CORBA_NO_EXCEPTION: /* Success */
+ printf("Init complete !\n");
+ break;
+ case CORBA_SYSTEM_EXCEPTION: /* System exception */
+ printf("Init call failure, reason : %s\n",(char *) CORBA_exception_value(env));
+ CORBA_exception_free(env);
+ client_exit(env);
+ default: /* Should not come here */
+ client_exit(env);
+ }
+
+ /* Calling the produce function */
+ for(i=1; i<=10; i++) {
+ result = rmod_random_produce(NULL, env);
+
+ switch(env->_major) {
+ case CORBA_NO_EXCEPTION: /* Success */
+ break;
+ case CORBA_SYSTEM_EXCEPTION: /* System exception */
+ printf("Init call failure, reason : %s\n",(char *) CORBA_exception_value(env));
+ CORBA_exception_free(env);
+ client_exit(env);
+ default: /* Should not come here */
+ client_exit(env);
+ }
+
+ printf("the random number nr%d is %f\n",i,result);
+ }
+
+ /* Closing the connection */
+ close(env->_fd);
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+
+ return 0;
+}
+
diff --git a/lib/ic/examples/c-server/client.erl b/lib/ic/examples/c-server/client.erl
new file mode 100644
index 0000000000..e225fc5789
--- /dev/null
+++ b/lib/ic/examples/c-server/client.erl
@@ -0,0 +1,44 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. 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%
+%%
+%%
+%%%----------------------------------------------------------------------
+%%% File : client.erl
+%%% Author : Babbis Xagorarakis <babbis@balin>
+%%% Purpose :
+%%% Created : 22 Oct 1998 by Babbis Xagorarakis <babbis@balin>
+%%%----------------------------------------------------------------------
+
+-module(client).
+-author('babbis@balin').
+
+-export([produce/0,init/3]).
+
+-define(SERVER,{rmod_random_impl,'babbis@balin'}).
+-define(CLIENTMOD,'rmod_random').
+
+produce() ->
+ ?CLIENTMOD:produce(?SERVER).
+
+
+init(Seed1, Seed2, Seed3) ->
+ ?CLIENTMOD:init(?SERVER, Seed1, Seed2, Seed3).
+
+
+
+
diff --git a/lib/ic/examples/c-server/random.idl b/lib/ic/examples/c-server/random.idl
new file mode 100644
index 0000000000..b2c21bdbfd
--- /dev/null
+++ b/lib/ic/examples/c-server/random.idl
@@ -0,0 +1,49 @@
+// ``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 via the world wide web 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.
+//
+// The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+// AB. All Rights Reserved.''
+//
+// $Id$
+//
+
+#ifndef _RANDOM_IDL
+#define _RANDOM_IDL
+
+module rmod {
+
+ interface random {
+
+ double produce();
+
+ oneway void init(in long seed1, in long seed2, in long seed3);
+
+ };
+
+};
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/c-server/server.c b/lib/ic/examples/c-server/server.c
new file mode 100644
index 0000000000..7e3c620040
--- /dev/null
+++ b/lib/ic/examples/c-server/server.c
@@ -0,0 +1,245 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1998-2009. 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%
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#ifdef __WIN32__
+#include <winsock2.h>
+#include <direct.h>
+#include <windows.h>
+#include <winbase.h>
+#else /* not __WIN32__ */
+#include <errno.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#endif
+#include "rmod_random__s.h"
+#include "ei_connect.h"
+
+/* Used functions */
+extern int gethostname(char *buf, int buflen);
+static int getport(int sockd);
+static int getlisten(int port);
+static int init(ei_cnode *ec, int *sd, int *portnr, int *epmd_fd);
+void terminate(int *fd, int *sd, int *epmd_fd);
+static void server_loop(ei_cnode *ec, int fd, int sd);
+
+/* change these, or even better, make command-line args to program... */
+#define COOKIE "flash"
+#define SERVER "babbis"
+#define NODENAMESZ 512
+#define HOSTNAMESZ 256
+#define INBUFSZ 1024
+#define OUTBUFSZ 1024
+
+
+int main(int argc, char **argv)
+{
+ int sd;
+ int portnr;
+ int epmd_fd;
+ ei_cnode ec;
+
+ /* crate file descriptors */
+ if (init(&ec, &sd, &portnr, &epmd_fd) < 0)
+ return -1;
+
+ /* start server loop */
+ server_loop(&ec, sd, epmd_fd);
+
+ return 0;
+}
+
+
+
+static void server_loop(ei_cnode *ec, int sd, int epmd_fd)
+{
+ ErlConnect conn;
+ erlang_msg msg;
+ int status=1;
+ CORBA_Environment *env;
+
+ /* Create and init CORBA_Environment */
+ env = CORBA_Environment_alloc(INBUFSZ,OUTBUFSZ);
+
+ while (status >= 0) {
+ status = 1;
+
+ if ((env->_fd = ei_accept(ec, sd, &conn)) < 0) {
+ /* error */
+ fprintf(stderr,"Accept failed: %s\n",strerror(errno));
+ } else {
+ /* connection */
+ fprintf(stderr,"Accepted connection from %s\n",conn.nodename);
+
+ while (status >= 0) {
+
+ /* write message to buffer */
+ status = ei_receive_encoded(env->_fd, &env->_inbuf, &env->_inbufsz, &msg, &env->_iin);
+ switch(status) {
+ case ERL_SEND:
+ case ERL_REG_SEND :
+ /* do transaction with fd */
+ rmod_random__switch(NULL,env);
+
+ switch(env->_major) {
+ case CORBA_NO_EXCEPTION: /* Success */
+ break;
+ case CORBA_SYSTEM_EXCEPTION: /* System exception */
+ printf("Request failure, reason : %s\n",(char *) CORBA_exception_value(env));
+ CORBA_exception_free(env);
+ break;
+ default: /* Should not come here */
+ CORBA_exception_free(env);
+ break;
+ }
+
+ /* send outdata */
+ if (env->_iout > 0)
+ ei_send_encoded(env->_fd,&env->_caller,env->_outbuf,env->_iout);
+ break;
+
+ case ERL_TICK :
+ break;
+ default : /* < 0 */
+ printf("Connection terminated\n");
+ break;
+ }
+ }
+ }
+ status=0; /* restart */
+ }
+
+ /* close file descriptors */
+ terminate(&env->_fd, &sd, &epmd_fd);
+
+ /* Free env & buffers */
+ CORBA_free(env->_inbuf);
+ CORBA_free(env->_outbuf);
+ CORBA_free(env);
+}
+
+
+
+static int init(int *sd, int *portnr, int *epmd_fd)
+{
+ char host[HOSTNAMESZ];
+ char servernode[NODENAMESZ];
+ struct hostent *h;
+
+ /* get the host name */
+ if ((gethostname(host,HOSTNAMESZ)))
+ fprintf(stderr,"can't find own hostname\n");
+ else {
+ /* identify host */
+ if (!(h = erl_gethostbyname(host)))
+ fprintf(stdout,"can't find own ip address\n");
+ else {
+
+ /* get a listen port. 0 means let system choose port number */
+ *sd = getlisten(0);
+
+ /* what port did we get? */
+ /* this call not necessary if we specified port in call to getlisten() */
+ *portnr = getport(*sd);
+
+ /* make the nodename server@host */
+ sprintf(servernode,"%s@%s",SERVER,host);
+
+ /* initiate */
+ /* cnode, host, alive, alive@host, addr, cookie, creation */
+ if (ei_connect_xinit(ec, host, SERVER, servernode,
+ (Erl_IpAddr)(h->h_addr_list[0]),
+ COOKIE, 0) == 0) {
+ /* let epmd know we are here */
+ *epmd_fd = ei_publish(ec, *portnr);
+ if (*epmd_fd >= 0)
+ return 0;
+ }
+ }
+ }
+ return -1;
+}
+
+
+void terminate(int *fd, int *sd, int *epmd_fd) {
+
+ close(*fd);
+
+ /* remove info from epnd */
+ close(*epmd_fd);
+
+ /* return socket */
+ close(*sd);
+
+}
+
+
+
+/* tells you what port you are using on given socket */
+static int getport(int sockd)
+{
+ struct sockaddr_in addr;
+ int namelen = sizeof(addr);
+ int i;
+
+ memset(&addr,0,sizeof(addr));
+
+ if ((i = getsockname(sockd,(struct sockaddr *)&addr,&namelen))<0)
+ return i;
+
+ return ntohs(addr.sin_port);
+}
+
+
+
+/* return a listen socket, bound to given port */
+/* specify port = 0 to let system assign port */
+static int getlisten(int port)
+{
+ int sockd;
+ struct sockaddr_in inaddr;
+ int opt = 1;
+ int i;
+
+ /* get listen socket */
+ if ((sockd = socket(AF_INET,SOCK_STREAM,0)) < 0) return sockd;
+
+ if ((i=setsockopt(sockd,SOL_SOCKET,SO_REUSEADDR,(void *)&opt,sizeof(opt)))<0)
+ return i;
+
+ /* bind to requested port */
+ memset(&inaddr,0,sizeof(inaddr));
+ inaddr.sin_family = AF_INET;
+ inaddr.sin_addr.s_addr = htonl(INADDR_ANY);
+ inaddr.sin_port = htons(port);
+
+ if ((i = bind(sockd,(struct sockaddr*) &inaddr, sizeof(inaddr))) < 0)
+ return i;
+
+ listen(sockd,5);
+
+ return sockd;
+}
diff --git a/lib/ic/examples/erl-genserv/ReadMe b/lib/ic/examples/erl-genserv/ReadMe
new file mode 100644
index 0000000000..cde588e269
--- /dev/null
+++ b/lib/ic/examples/erl-genserv/ReadMe
@@ -0,0 +1,30 @@
+This is a short description on the use of the c-client demo,
+a client that initiates and uses a random number generator
+that lies on an Erlang-genserver.
+
+Instructions.
+
+ On the erlang shell type :
+ --------------------------
+
+ ic:gen(random,[{be,erl_genserv}]). ( generates the plain code )
+
+ make:all(). ( compiles the erlang code )
+
+ {ok,R} = rmod_random:oe_create(). ( initializes the server )
+
+
+ Running the example :
+ ---------------------
+
+ rmod_random:init(R,1,2,3). ( initializes the generator )
+
+ rmod_random:produce(R). ( generates a random number )
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/erl-genserv/random.idl b/lib/ic/examples/erl-genserv/random.idl
new file mode 100644
index 0000000000..4527988b48
--- /dev/null
+++ b/lib/ic/examples/erl-genserv/random.idl
@@ -0,0 +1,50 @@
+// ``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 via the world wide web 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.
+//
+// The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+// AB. All Rights Reserved.''
+//
+// $Id$
+//
+
+#ifndef _RANDOM_IDL
+#define _RANDOM_IDL
+
+
+module rmod {
+
+ interface random {
+
+ double produce();
+
+ oneway void init(in long seed1, in long seed2, in long seed3);
+
+ };
+
+};
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/erl-genserv/rmod_random_impl.erl b/lib/ic/examples/erl-genserv/rmod_random_impl.erl
new file mode 100644
index 0000000000..70f5887f1c
--- /dev/null
+++ b/lib/ic/examples/erl-genserv/rmod_random_impl.erl
@@ -0,0 +1,63 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. 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%
+%%
+%%
+-module('rmod_random_impl').
+-export([init/1, terminate/2, start/0]).
+-export([produce/1,init/4]).
+
+
+init(Env) ->
+ {ok, []}.
+
+terminate(From, Reason) ->
+ ok.
+
+
+produce(_Random) ->
+ case catch random:uniform() of
+ {'EXIT',_} ->
+ true;
+ RUnif ->
+ {reply,RUnif,[]}
+ end.
+
+
+init(_Random,S1,S2,S3) ->
+ case catch random:seed(S1,S2,S3) of
+ {'EXIT',_} ->
+ true;
+ _ ->
+ {noreply,[]}
+ end.
+
+
+%% This starts up the random number server
+start() ->
+ %% Start the gen server
+ {ok,Pid} = rmod_random:oe_create([],{local,'rmod_random_impl'}),
+ true.
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/erl-plain/ReadMe b/lib/ic/examples/erl-plain/ReadMe
new file mode 100644
index 0000000000..26440b4d4f
--- /dev/null
+++ b/lib/ic/examples/erl-plain/ReadMe
@@ -0,0 +1,27 @@
+This is a short description on the use of the erl-plain demo,
+a client that initiates and uses a random number generator
+that lies on an Erlang-genserver.
+
+Instructions.
+
+ On the erlang shell type :
+ --------------------------
+
+ ic:gen(random,[{be,erl_plain}]). ( generates the plain code )
+
+ make:all(). ( compiles the erlang code )
+
+
+ Running the example :
+ ---------------------
+
+ rmod_random:init(1,2,3). ( initializes the generator )
+
+ rmod_random:produce(). ( generates a random number )
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/erl-plain/random.idl b/lib/ic/examples/erl-plain/random.idl
new file mode 100644
index 0000000000..f7762236ca
--- /dev/null
+++ b/lib/ic/examples/erl-plain/random.idl
@@ -0,0 +1,52 @@
+// ``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 via the world wide web 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.
+//
+// The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+// AB. All Rights Reserved.''
+//
+// $Id$
+//
+#pragma CODEOPT "[{be,c_genserv}]"
+
+
+#ifndef _RANDOM_IDL
+#define _RANDOM_IDL
+
+
+module rmod {
+
+ interface random {
+
+ double produce();
+
+ oneway void init(in long seed1, in long seed2, in long seed3);
+
+ };
+
+};
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/erl-plain/rmod_random_impl.erl b/lib/ic/examples/erl-plain/rmod_random_impl.erl
new file mode 100644
index 0000000000..7e7b2f0821
--- /dev/null
+++ b/lib/ic/examples/erl-plain/rmod_random_impl.erl
@@ -0,0 +1,32 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1998-2009. 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%
+%%
+%%
+-module('rmod_random_impl').
+
+-export([produce/0,init/3]).
+
+
+produce() ->
+ random:uniform().
+
+
+init(S1,S2,S3) ->
+ random:seed(S1,S2,S3),
+ ok.
+
diff --git a/lib/ic/examples/java-client-server/ReadMe b/lib/ic/examples/java-client-server/ReadMe
new file mode 100644
index 0000000000..9fde464e09
--- /dev/null
+++ b/lib/ic/examples/java-client-server/ReadMe
@@ -0,0 +1,69 @@
+This is a short description on the use of the java demo,
+a client that initiates and uses a random number generator
+that lies on a java-server. You will be able to shift the
+existing client/server with the ones refered to the other
+examples.
+
+Instructions.
+
+1) Start erlang
+
+ On the erlang shell type :
+ --------------------------
+
+ ic:gen(random,[{be,java}]). ( generates the java code )
+
+
+2) Modify the "SNode" string on file "server.java" to the server
+ node name thet suites for your machine.
+
+
+3) Modify the "SNode" string on file "client.java" to the client
+ node for your machine and the "PNode" string for the server
+ node ( = the same as the SNode for the "server.java" file ).
+
+
+4) Set and export the CLASSPATH variable to point to the
+ java classes located in java development kit, the
+ Otp's classes and the current directory.
+ Your classpath should look like this :
+
+ .:<OTPROOT>/lib/ic-4.0/priv/ic.jar:<OTPROOT>/lib/jinterface_1.1/priv/OtpErlang.jar
+
+ where :
+
+ <OTPROOT> is the location there OTP is installed
+
+
+5) Start the empd deamon by using the command :
+
+ epmd -daemon
+
+
+6) Compile the generated java code :
+
+ javac rmod/*.java ( compiles all generated java code )
+
+ javac *.java ( compiles all manually writen java code )
+
+
+7) Start the java on an terminal window :
+
+ java server ( starts the java-server )
+
+
+8) Start the client on an terminal window :
+
+ java client ( calls the server )
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/java-client-server/client.java b/lib/ic/examples/java-client-server/client.java
new file mode 100644
index 0000000000..4dc88cffbb
--- /dev/null
+++ b/lib/ic/examples/java-client-server/client.java
@@ -0,0 +1,60 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+public class client {
+
+ private static java.lang.String SNode = "client";
+ private static java.lang.String PNode = "babbis";
+ private static java.lang.String Cookie = "flash";
+ private static java.lang.String Server = "rmod_random_impl";
+
+ private static rmod._randomStub stub;
+
+ public static void main(String[] args) {
+
+ try {
+
+ stub = new rmod._randomStub(SNode,PNode,Cookie,Server);
+ int seed1 = 1;
+ int seed2 = 2;
+ int seed3 = 3;
+ double random = 0;
+
+ System.out.print("\nClient initialization....");
+ stub.init(seed1,seed2,seed3);
+ System.out.println("ok\n");
+
+
+ for (int i = 0; i < 10; i++) {
+ random = stub.produce();
+ System.out.println("Random" + i + " = " + random);
+ }
+ System.out.println("\nClient terminated.\n");
+
+ stub.__disconnect();
+
+ } catch( Exception e) {
+ System.out.println("Exception :");
+ e.printStackTrace();
+ }
+
+ }
+
+}
+
diff --git a/lib/ic/examples/java-client-server/random.idl b/lib/ic/examples/java-client-server/random.idl
new file mode 100644
index 0000000000..b2c21bdbfd
--- /dev/null
+++ b/lib/ic/examples/java-client-server/random.idl
@@ -0,0 +1,49 @@
+// ``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 via the world wide web 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.
+//
+// The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+// AB. All Rights Reserved.''
+//
+// $Id$
+//
+
+#ifndef _RANDOM_IDL
+#define _RANDOM_IDL
+
+module rmod {
+
+ interface random {
+
+ double produce();
+
+ oneway void init(in long seed1, in long seed2, in long seed3);
+
+ };
+
+};
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/ic/examples/java-client-server/server.java b/lib/ic/examples/java-client-server/server.java
new file mode 100644
index 0000000000..6b5fe8fcfd
--- /dev/null
+++ b/lib/ic/examples/java-client-server/server.java
@@ -0,0 +1,82 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+public class server {
+
+ private static java.lang.String SNode = "babbis";
+ private static java.lang.String Cookie = "flash";
+ private static java.lang.String RegName = "rmod_random_impl";
+
+ public static void main(String[] args) {
+
+
+ System.out.println("\nServer running.\n");
+ boolean serverState = true;
+ boolean recState = true;
+
+ try {
+
+ com.ericsson.otp.erlang.OtpServer self = new com.ericsson.otp.erlang.OtpServer(SNode, Cookie);
+ self.publishPort();
+
+ /* Server loop */
+ while(serverState == true) {
+
+ com.ericsson.otp.erlang.OtpConnection connection = self.accept();
+ serverImpl srv = new serverImpl();
+ com.ericsson.otp.erlang.OtpInputStream request;
+ com.ericsson.otp.erlang.OtpOutputStream reply;
+ com.ericsson.otp.erlang.OtpErlangPid client;
+
+ /* Server loop */
+ while(recState == true) {
+
+ if (connection.isConnected() == true)
+ try {
+
+ request = connection.receiveBuf();
+
+ reply = srv.invoke(request);
+
+ if (reply != null) {
+ client = srv.__getCallerPid();
+
+ connection.sendBuf(client,reply);
+ }
+
+ } catch( Exception e) {
+ System.out.println("Server terminated.\n\n");
+ recState = false;
+ serverState = false;
+ }
+ }
+
+ connection.close();
+ }
+
+ } catch( Exception e) {
+ System.out.println("Initialization exception :");
+ e.printStackTrace();
+ }
+ }
+}
+
+
+
+
diff --git a/lib/ic/examples/java-client-server/serverImpl.java b/lib/ic/examples/java-client-server/serverImpl.java
new file mode 100644
index 0000000000..d5fb66e96b
--- /dev/null
+++ b/lib/ic/examples/java-client-server/serverImpl.java
@@ -0,0 +1,42 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1999-2009. 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%
+ *
+ */
+public class serverImpl extends rmod._randomImplBase {
+
+ java.util.Random random = null;
+
+
+ public void init(int seed1, int seed2, int seed3) throws java.lang.Exception {
+
+ random = new java.util.Random(seed1+seed2+seed3);
+ };
+
+
+ public double produce() throws java.lang.Exception {
+
+ return random.nextDouble();
+ }
+
+}
+
+
+
+
+
+
diff --git a/lib/ic/examples/pre_post_condition/Makefile b/lib/ic/examples/pre_post_condition/Makefile
new file mode 100644
index 0000000000..68e2168e1e
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/Makefile
@@ -0,0 +1,128 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1999-2009. 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%
+#
+#
+# ``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 via the world wide web 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.
+#
+# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+# AB. All Rights Reserved.''
+#
+# $Id$
+#
+include $(ERL_TOP)/make/target.mk
+
+EBIN= ./
+
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../../vsn.mk
+VSN=$(IC_VSN)
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/lib/ic-$(VSN)
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+
+IDL_FILES = \
+ ex.idl
+
+GEN_ERL_MODULES = \
+ oe_ex \
+ m_i \
+ m_NotAnInteger
+
+MODULES= \
+ m_i_impl \
+ tracer
+
+GEN_HRL_FILES = \
+ oe_ex.hrl \
+ m.hrl \
+ m_i.hrl
+
+HRL_FILES =
+TXT_FILES = ReadMe.txt
+
+ERL_FILES= $(MODULES:%=%.erl)
+
+
+TARGET_FILES = \
+ $(GEN_ERL_MODULES:%=$(EBIN)/%.$(EMULATOR)) \
+ $(MODULES:%=$(EBIN)/%.$(EMULATOR))
+
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_LOCAL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
+# The -pa option is just used temporary until erlc can handle
+# includes from other directories than ../include .
+ERL_COMPILE_FLAGS += \
+ $(ERL_LOCAL_FLAGS) \
+ -pa $(ERL_TOP)/lib/orber -I$(ERL_TOP)/lib/orber
+YRL_FLAGS =
+
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f $(TARGET_FILES) $(GEN_ERL_MODULES:%=%.erl) $(GEN_HRL_FILES) $(CLASS_FILES)
+ rm -f errs core *~
+
+docs:
+
+test: $(TEST_TARGET_FILES)
+
+
+$(GEN_ERL_MODULES:%=%.erl) $(GEN_HRL_FILES): ex.idl
+ erlc $(ERL_LOCAL_FLAGS) +'{precond,{tracer,pre}}' \
+ +'{{postcond,"m::i::f"},{tracer,post}}' ex.idl
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+
+release_spec: opt
+ $(INSTALL_DIR) $(RELSYSDIR)/examples/pre_post_condition
+ $(INSTALL_DATA) $(ERL_FILES) $(IDL_FILES) $(TXT_FILES) $(RELSYSDIR)/examples/pre_post_condition
+
+
+release_docs_spec:
+
+
diff --git a/lib/ic/examples/pre_post_condition/ReadMe.txt b/lib/ic/examples/pre_post_condition/ReadMe.txt
new file mode 100644
index 0000000000..9db54f438d
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/ReadMe.txt
@@ -0,0 +1,73 @@
+ ``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 via the world wide web 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.
+
+ The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+ Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+ AB. All Rights Reserved.''
+
+ $Id$
+
+
+This example shows how pre and post condition can be used for a Corba server object.
+
+
+The example consists of three files;
+
+ex.idl - the interface specification
+m_i_impl.erl - the server implementation
+tracer.erl - a module which contains a pre and a post condition
+
+
+The IDL file can for example be compiled with the following options:
+
+ic:gen(ex, [{precond, {tracer, pre}},{{postcond, "m::i::f"}, {tracer, post}}]).
+
+The result is that the function m::i::f gets both a pre and post condition call while
+the function m::i::g just get a pre condition call.
+
+
+A pre/post condition function should always return the atom ok and if something is wrong
+it should raise an exception ( ex: corba:raise(#userexception{}) ).
+
+
+
+
+Compile all erlang files and test the application.
+
+First start an erlang node, then type the following commands in the erlang shell.
+
+1> mnesia:create_schema([]).
+2> orber:install([]).
+3> orber:start().
+3>
+3> X = m_i:oe_create().
+4> catch m_i:f(X, 17).
+Precond called in process <0.139.0>: m_i:f() [[],17]
+f working ....
+Postcond called in process <0.139.0>: m_i:f() [[],17] {reply,{17,17},[]}
+17
+5>
+5> catch m_i:f(X, q).
+6> {'EXCEPTION',{m_NotAnInteger,"IDL:m/NotAnInteger:1.0"}}
+7>
+7>m_i:g(X, 17).
+Precond called in process <0.139.0>: m_i:g() [[],17]
+ok
+g working ....
+8>
+8>corba_boa:dispose(X).
+9> orber:stop().
+10>
+
+
+
+
+
diff --git a/lib/ic/examples/pre_post_condition/ex.idl b/lib/ic/examples/pre_post_condition/ex.idl
new file mode 100644
index 0000000000..e632448cc5
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/ex.idl
@@ -0,0 +1,29 @@
+// ``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 via the world wide web 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.
+//
+// The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+// AB. All Rights Reserved.''
+//
+// $Id$
+//
+
+module m {
+
+ exception NotAnInteger {};
+
+ interface i {
+ short f(in short i);
+ oneway void g(in long i);
+ };
+
+};
+
diff --git a/lib/ic/examples/pre_post_condition/m_i_impl.erl b/lib/ic/examples/pre_post_condition/m_i_impl.erl
new file mode 100644
index 0000000000..d43ee0ac94
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/m_i_impl.erl
@@ -0,0 +1,49 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2009. 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%
+%%
+%%
+%%------------------------------------------------------------
+%%
+%% Example
+%%
+%%------------------------------------------------------------
+-module(m_i_impl).
+
+%% Standard functions
+-export([init/1, terminate/2]).
+%% Interface functions
+-export([f/2, g/2]).
+
+init(_Env) ->
+ {ok, []}.
+
+terminate(_From, _Reason) ->
+ ok.
+
+f(State, In) ->
+ io:format("f working ....\n", []),
+ {reply, In, State}.
+
+g(State, _In) ->
+ io:format("g working ....\n", []),
+ {noreply, State}.
+
+
+
+
+
diff --git a/lib/ic/examples/pre_post_condition/tracer.erl b/lib/ic/examples/pre_post_condition/tracer.erl
new file mode 100644
index 0000000000..4cba7ba9bb
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/tracer.erl
@@ -0,0 +1,56 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2009. 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%
+%%
+%%
+%%-----------------------------------------------------------------
+%% File: tracer.erl
+%%
+%% Description:
+%% This file contains an example of pre and post conditions for
+%% the corba backend.
+%%
+%%-----------------------------------------------------------------
+-module(tracer).
+-include("m.hrl").
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([pre/3, post/4]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+
+%%-----------------------------------------------------------------
+%% External functions
+%%-----------------------------------------------------------------
+pre(M, F, [State, I]) when is_integer(I) ->
+ io:format("Precond called in process ~p: ~s:~s() ~p\n", [self(), M, F, [State, I]]),
+ ok;
+pre(_M, _F, _A) -> %% Just an silly example to get an exception case
+ corba:raise(#'m_NotAnInteger'{}).
+
+post(M, F, A, R) ->
+ io:format("Postcond called in process ~p: ~s:~s() ~p ~p\n", [self(), M, F, A, R]),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------