/* * Receives message string from the network and * returns the appropriate numeric token. If error * occurs -1 is returned. */ int recvmstr(int sock,char **s) { char buf[MAX_MSGSTR + 1]; unsigned long ultmp; int i; size_t len; DLOG_MSG(("recvmstr() : recvul(%d)",sock)); if (!recvul(sock,&ultmp)) return -1; len = (size_t)ultmp; if (len == 0 || len > MAX_MSGSTR) { errlog(LOG_ERR,"recvmstr() : len=%lu",(unsigned long)len); return -1; } DLOG_MSG(("recvmstr() : x_recv(%d)",sock)); if (!x_recv(sock,buf,len)) { DLOG_ERROR(("recvstr()")); return -1; } buf[len] = '\0'; DLOG_MSG(("recvstr() : buf=%s",buf)); for (i = 0; s[i]; i++) if (streql(s[i],buf)) return i; errlog(LOG_ERR,"recvmstr() : unknown message (%s)",buf); return -1; }
int mail(char **argv) { SOCKET sock; SOCKADDR_IN sin; struct hostent *hostinfo; char buffer[SIZE_BUFFER]; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { my_putstr("Error: Socket cannot be created.\n"); return (sock); } hostinfo = gethostbyname(HOSTNAME); sin.sin_addr = *(IN_ADDR *) hostinfo->h_addr; sin.sin_port = htons(25); sin.sin_family = AF_INET; if (connect(sock, (SOCKADDR *) &sin, sizeof(sin)) == SOCKET_ERROR) { my_putstr("Erreur: cannot connect to the server.\n"); return (SOCKET_ERROR); } x_recv(sock, buffer); my_putstr(buffer); smtp(argv[1], argv[2], argv[3], argv[4], &sock); return (0); }
void s_hello(SOCKET *sock, char *name, int put) { char *msg; char buffer[SIZE_BUFFER]; msg = malloc(100); create_mesg(msg, HELLO, name, NULL); x_send(*sock, msg); x_recv(*sock, buffer); if (put) { my_putstr(buffer); } }
int recvul(int sock,unsigned long *ul) { char buf[MAX_ULSTR + 1]; DLOG_MSG(("recvul() : x_recv(%d)",sock)); if (!x_recv(sock,buf,sizeof buf)) { DLOG_ERROR(("recvul()")); return 0; } *ul = strtoul(buf,(char **)0,10); DLOG_MSG(("recvul() : buf=%s *ul=%lu",buf,*ul)); return 1; }
static void run_pp_server(void) { if (!arg_pscom) { while (1) { x_recv(); x_send(8); // ToDo: } } else { while (1) { int len; len = x_recv_pscom(); x_send_pscom(len); } } }
static int run_pp_c(int msize, int loops) { int cnt; if (!arg_pscom) { for (cnt = 0; cnt < loops; cnt++) { x_send(msize); x_recv(); } } else { for (cnt = 0; cnt < loops; cnt++) { int len; x_send_pscom(msize); len = x_recv_pscom(); assert(len == msize); } } return 0; }
/* * Receives string from network (length info comes first) and * returns an allocated buffer containing the string and its length * (len will be in the same form as when returned by strlen(), i.e., * excluding the null terminator). If len is zero, the string * was empty in which case strorage will not be allocated * and the actual x_recv() for the string is not performed. * If the string buffer passed to recvstr() was not empty (i.e., * the pointer to it was not null) it is freed first. */ int recvstr(int sock,char **s,size_t *len) { unsigned long ultmp; DLOG_MSG(("recvstr() : recvul(%d)",sock)); if (!recvul(sock,&ultmp)) return 0; *len = (size_t)ultmp; if (*s) x_free(*s); if (*len > 0) { DLOG_MSG(("recvstr() : x_recv(%d)",sock)); *s = (char *)x_malloc(*len + 1); if (!x_recv(sock,*s,*len)) { DLOG_ERROR(("recvstr()")); return 0; } DLOG_MSG(("recvstr() : *s=%s",*s)); } else *s = (char *)0; return 1; }