Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sdk:scripts:udp-msg-server [2015/05/05 17:04] (current)
Line 1: Line 1:
 +====== SDK Script udp-msg-server.are ======
 +<code c udp-msg-server.are>​
 +/* DESC: This script will run an UDP server which is able to receive messages and forward them as SMS/E-Mail.
 + * Copyright (C) 2012 NetModule AG, Switzerland
 + */
 +
 +void usage()
 +{
 +    printf("​usage:​ udpserver.are <​port>​ <​email-addr>​ <​sms-number>​\n"​);​
 +    exit(1);
 +}
 +
 +if (argc < 2) {
 +    usage();
 +}
 +
 +PORT = (int) argv[1];
 +EMAILADDR = trim((string) argv[2]);
 +NUMBER = trim((string) argv[3]);
 +
 +/* check arguments */
 +if (strlen(EMAILADDR) > 0) {
 +    pos = strchr(EMAILADDR,​ "​@"​);​
 +    if (is_void(pos)) {
 +        printf("​ERROR:​ Invalid E-Mail address\n"​);​
 +        exit(1);
 +    }
 +}
 +if (strlen(NUMBER) > 0) {
 +    pos = strchr(NUMBER,​ "​+"​);​
 +    if (is_void(pos) || pos != 0) {
 +        printf("​ERROR:​ Invalid SMS number\n"​);​
 +        exit(1);
 +    }
 +}
 +
 +printf("​Going send E-mail to '​%s',​ SMS to '​%s'​\n",​ EMAILADDR, NUMBER);
 +
 +/* open UDP socket */
 +sock = socket(AF_INET,​ SOCK_DGRAM, IPPROTO_UDP);​
 +if (sock < 0) {
 +    printf("​ERROR:​ Unable to open socket\n"​);​
 +    exit(1);
 +}
 +
 +/* bind socket to 1st LAN interface */
 +addr = nb_ifc_address("​LAN1"​);​
 +ret = bind(sock, PORT, addr);
 +if(ret == -1) {
 +    printf("​ERROR:​ Unable to bind to port %d on LAN1\n",​ PORT);
 +    close(sock);​
 +    exit(1);
 +}
 +
 +printf("​Listening for messages on port %d\n", PORT);
 +
 +while (1) {
 +    msg = recvfrom(sock);​
 +    if (left(msg, 4) == "​quit"​) {
 +        printf("​Received quit, terminating ...\n"​);​
 +        break;
 +    } else if (msg != ""​) {     ​
 +        printf("​Received message '​%s'​\n",​ msg);
 +
 +        /* send E-mail */
 +        if (strlen(EMAILADDR) > 0) {
 +            if (nb_email_send(EMAILADDR,​ "​message received",​ msg) == 0) {
 +                printf("​Forwarded message via E-mail\n"​);​
 +            } else {
 +                printf("​ERROR:​ Unable to send E-mail\n"​);​
 +            }
 +        }
 +        /* send SMS  */
 +        if (strlen(NUMBER) > 0) {
 +            id = nb_sms_send(NUMBER,​ msg);
 +            if (id) {
 +                printf("​Forwarded message via SMS\n"​);​
 +            } else {
 +                printf("​ERROR:​ Unable to send SMS\n"​);​
 +            }
 +        }
 +    }
 +}
 +
 +close(sock);​
 +exit(0);
 +
 +</​code>​