1 /* cnode_c.c */
2
3 #include <stdio.h>
4 #include <sys/types.h>
5 #include <sys/socket.h>
6 #include <netinet/in.h>
7
8 #include "erl_interface.h"
9 #include "ei.h"
10
11 #define BUFSIZE 1000
12
main(int argc,char ** argv)13 int main(int argc, char **argv) {
14 int fd; /* fd to Erlang node */
15
16 int loop = 1; /* Loop flag */
17 int got; /* Result of receive */
18 unsigned char buf[BUFSIZE]; /* Buffer for incoming message */
19 ErlMessage emsg; /* Incoming message */
20
21 ETERM *fromp, *tuplep, *fnp, *argp, *resp;
22 int res;
23
24 erl_init(NULL, 0);
25
26 if (erl_connect_init(1, "secretcookie", 0) == -1)
27 erl_err_quit("erl_connect_init");
28
29 if ((fd = erl_connect("e1@idril")) < 0)
30 erl_err_quit("erl_connect");
31 fprintf(stderr, "Connected to ei@idril\n\r");
32
33 while (loop) {
34
35 got = erl_receive_msg(fd, buf, BUFSIZE, &emsg);
36 if (got == ERL_TICK) {
37 /* ignore */
38 } else if (got == ERL_ERROR) {
39 loop = 0;
40 } else {
41
42 if (emsg.type == ERL_REG_SEND) {
43 fromp = erl_element(2, emsg.msg);
44 tuplep = erl_element(3, emsg.msg);
45 fnp = erl_element(1, tuplep);
46 argp = erl_element(2, tuplep);
47
48 if (strncmp(ERL_ATOM_PTR(fnp), "foo", 3) == 0) {
49 res = foo(ERL_INT_VALUE(argp));
50 } else if (strncmp(ERL_ATOM_PTR(fnp), "bar", 3) == 0) {
51 res = bar(ERL_INT_VALUE(argp));
52 }
53
54 resp = erl_format("{cnode, ~i}", res);
55 erl_send(fd, fromp, resp);
56
57 erl_free_term(emsg.from); erl_free_term(emsg.msg);
58 erl_free_term(fromp); erl_free_term(tuplep);
59 erl_free_term(fnp); erl_free_term(argp);
60 erl_free_term(resp);
61 }
62 }
63 }
64 }
65