]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
*** empty log message ***
authormuench <muench>
Fri, 18 Feb 2000 11:59:24 +0000 (11:59 +0000)
committermuench <muench>
Fri, 18 Feb 2000 11:59:24 +0000 (11:59 +0000)
hadaq/nettrans.c

index cc48d6a75d0963e807f6712502413b4736f71ad6..cbbe329998baa829a7344d60d8a2e398ad85f15c 100644 (file)
@@ -1,4 +1,4 @@
-static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.8 1999-11-16 16:07:22 hades Rel $";
+static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/nettrans.c,v 6.9 2000-02-18 11:59:24 muench Exp $";
 
 #define _XOPEN_SOURCE_EXTENDED
 #include <unistd.h>
@@ -11,7 +11,10 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
 #include <sys/time.h>
+#include <sys/types.h>
 
 #include <hadesstd.h>
 
@@ -28,8 +31,47 @@ static int min(int a, int b)
        return a < b ? a : b;
 }
 
-static int openUdp(NetTrans *my, const char *name, int fl) {
-       return -1;
+static int openUdp(NetTrans *my, unsigned long addr, int port, int fl) {
+       int retVal;
+       struct sockaddr_in sa;
+
+       assert(my != NULL);
+
+       my->fd = socket(AF_INET, SOCK_DGRAM, 0);
+
+       if (-1 == my->fd) {
+               retVal = -1;
+       } else {
+               switch (fl) {
+               case O_RDONLY:
+                       sa.sin_family = AF_INET;
+                       sa.sin_port = htons(port);
+                       sa.sin_addr.s_addr = 0;
+                       retVal = bind(my->fd, &sa, sizeof(sa));
+                       break;
+               case O_WRONLY:
+                       sa.sin_family = AF_INET;
+                       sa.sin_port = htons(port);
+                       sa.sin_addr.s_addr = addr;
+                       retVal = connect(my->fd, &sa, sizeof(sa));
+                       break;
+               default:
+                       errno = EINVAL;
+                       retVal = -1;
+                       break;
+               }
+
+               if (0 > retVal) {
+                       close(my->fd);
+               } else {
+                       my->mtuSize = 8192;
+               }
+       }
+
+       if (0 > retVal) {
+               msglog(LOG_DEBUG, "openAtm: %s\n", strerror(errno));
+       }
+       return retVal;
 }
 
 static int openAtm(NetTrans *my, int vpi, int vci, size_t bw, int fl) {
@@ -68,6 +110,7 @@ static int openAtm(NetTrans *my, int vpi, int vci, size_t bw, int fl) {
                        deleteLAtm(my->lAtm);
                } else {
                        my->mtuSize = LAtm_mtu(my->lAtm);
+                       my->fd = LAtm_fd(my->lAtm);
                }
        }
 
@@ -99,8 +142,13 @@ int openGeneric(NetTrans *my, const char *name, int flags, size_t bandwidth) {
                        my->type = NetTransType_atm;
                        retVal = openAtm(my, vpi, vci, bandwidth, flags);
                } else if (strcmp(fam, "UDP") == 0) {
+                       unsigned long addr;
+                       int port;
+
+                       addr = inet_addr(pa);
+                       port = atoi(ep);
                        my->type = NetTransType_udp;
-                       retVal = openUdp(my, name, flags);
+                       retVal = openUdp(my, addr, port,flags);
                } else {
                        my->type = NetTransType_invalid;
                        errno = EINVAL;
@@ -124,6 +172,10 @@ int closeGeneric(NetTrans *my) {
                deleteLAtm(my->lAtm);
                retVal = 0;
                break;
+       case NetTransType_udp:
+               close(my->fd);
+               retVal = 0;
+               break;
        }
 
        if (0 > retVal) {
@@ -141,6 +193,9 @@ int sendGeneric(NetTrans *my) {
        case NetTransType_atm:
                retVal = LAtm_send(my->lAtm, my->pkt, Pkt_size(my->pkt));
                break;
+       case NetTransType_udp:
+               retVal = send(my->fd, my->pkt, Pkt_size(my->pkt), 0);
+               break;
        }
 
        if (retVal != Pkt_size(my->pkt)) {
@@ -162,6 +217,9 @@ int recvGeneric(NetTrans *my) {
        case NetTransType_atm:
                retVal = LAtm_recv(my->lAtm, my->pkt, my->mtuSize);
                break;
+       case NetTransType_udp:
+               retVal = recv(my->fd, my->pkt, my->mtuSize, 0);
+               break;
        }
 
        if (retVal != Pkt_size(my->pkt)) {
@@ -389,13 +447,13 @@ unsigned long NetTrans_multiRecv(NetTrans *my[], void *hadTu[], size_t size[], i
        do {
                FD_ZERO(fdSet);
                for (i = 0; i < nrOfMsgs; i++) {
-                       FD_SET(my[i]->lAtm->fd, fdSet);
+                       FD_SET(my[i]->fd, fdSet);
                }
                if (0 > select(getdtablesize(), fdSet, NULL, NULL, NULL)) {
                        abort();
                }
                for (i = 0; i < nrOfMsgs; i++) {
-                       if (FD_ISSET(my[i]->lAtm->fd, fdSet)) {
+                       if (FD_ISSET(my[i]->fd, fdSet)) {
                                if (assembleMsg(my[i], hadTu[i], size[i])) {
                                        msgIsComplete |= 1 << i;
                                }