~ubuntu-branches/ubuntu/trusty/erlang/trusty

« back to all changes in this revision

Viewing changes to system/doc/tutorial/cnode_c.c

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum
  • Date: 2011-05-05 15:48:43 UTC
  • mfrom: (3.5.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110505154843-0om6ekzg6m7ugj27
Tags: 1:14.b.2-dfsg-3ubuntu1
* Merge from debian unstable.  Remaining changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to.
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.
  - debian/patches/series: Do what I meant, and enable build-options.patch
    instead.
* Additional changes:
  - Drop erlang-wx from -et
* Dropped Changes:
  - patches/pcre-crash.patch: CVE-2008-2371: outer level option with
    alternatives caused crash. (Applied Upstream)
  - fix for ssl certificate verification in newSSL: 
    ssl_cacertfile_fix.patch (Applied Upstream)
  - debian/patches/series: Enable native.patch again, to get stripped beam
    files and reduce the package size again. (build-options is what
    actually accomplished this)
  - Remove build-options.patch on advice from upstream and because it caused
    odd build failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
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
}