source: TI05-delivery/trunk/src/bbftp-client-3.2.0/bbftpc/readmessage.c @ 1426

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI05-delivery/trunk/src/bbftp-client-3.2.0/bbftpc/readmessage.c@1426
Revision 1426, 7.2 KB checked in by spascoe, 13 years ago (diff)

Added temporary debug code.

Line 
1/*
2 * bbftpc/readmessage.c
3 * Copyright (C) 1999, 2000, 2001, 2002 IN2P3, CNRS
4 * bbftp@in2p3.fr
5 * http://doc.in2p3.fr/bbftp
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20 */ 
21
22/****************************************************************************
23
24 
25 
26 readmessage.c v 0.0.0  1999/11/24
27               v 1.6.0  2000/03/24  - Cosmetic...
28               v 1.7.1  2000/04/04  - Portage to IRIX (IRIX64)
29               v 1.8.7  2000/05/24  - Set the socket in non block mode
30               v 1.8.9  2000/08/08  - Add timestamp
31               v 1.8.10 2000/08/10  - Portage to Linux
32               v 1.9.0  2000/08/24  - Use configure to help port
33               v 2.0.0  2001/03/08  - Change recv for read and add debug
34               v 2.0.1  2001/04/19  - Correct indentation
35
36*****************************************************************************/
37#include <bbftp.h>
38
39#include <syslog.h>
40#include <errno.h>
41#include <stdio.h>
42#if TIME_WITH_SYS_TIME
43# include <sys/time.h>
44# include <time.h>
45#else
46# if HAVE_SYS_TIME_H
47#  include <sys/time.h>
48# else
49#  include <time.h>
50# endif
51#endif
52#include <sys/types.h>
53#include <unistd.h>
54#if HAVE_STRING_H
55# include <string.h>
56#endif
57
58#include <client.h>
59#include <client_proto.h>
60
61extern int  timestamp ;
62extern int  debug ;
63
64int readmessage(int sock,char *buffer,int msglen,int to,int fromchild) 
65{
66    int     retcode ;
67    char    ent[40] ;
68    int     nfds ;
69    fd_set  selectmask ; /* Select mask */
70    struct timeval    wait_timer;
71    int     msgsize ;
72    int     msgget ;
73    int     nbget ;
74
75
76    if ( fromchild == 1 ) {
77        sprintf(ent,"Child %06d : ",getpid()) ;
78    } else {
79        strcpy(ent,"") ;
80    }
81    nbget = 0 ;
82    msgsize = msglen ;
83/*
84** start the reading loop
85*/
86    while ( nbget < msgsize ) {
87        nfds = sysconf(_SC_OPEN_MAX) ;
88        FD_ZERO(&selectmask) ;
89        FD_SET(sock,&selectmask) ;
90        wait_timer.tv_sec  = to ;
91        wait_timer.tv_usec = 0 ;
92        if ( (retcode = select(FD_SETSIZE,&selectmask,0,0,&wait_timer) ) == -1 ) {
93            /*
94            ** Select error
95            */
96            if (debug ) 
97                PRINTMESSAGE(stderr,CASE_NORMAL,0,timestamp,"%sRead message : Select error : MSG (%d,%d)\n",ent,msglen,nbget) ;
98            return -1 ;
99        } else if ( retcode == 0 ) {
100            if (debug ) 
101                PRINTMESSAGE(stderr,CASE_NORMAL,0,timestamp,"%sRead message : Time out : MSG (%d,%d)",ent,msglen,nbget) ;
102            return -1 ;
103        } else {
104            msgget = read(sock,&buffer[nbget],msgsize-nbget) ;
105            if ( msgget < 0 ) {
106                if (debug ) 
107                    PRINTMESSAGE(stderr,CASE_NORMAL,0,timestamp,"%sRead message : Receive error : MSG (%d,%d) %s",ent,msglen,nbget,strerror(errno)) ;
108                return -1 ;
109            } else if ( msgget == 0 ) {
110                if (debug ) 
111                    PRINTMESSAGE(stderr,CASE_NORMAL,0,timestamp,"%sRead message : Connection breaks : MSG (%d,%d)\n",ent,msglen,nbget) ;
112                return -1 ;
113            } else {
114                nbget = nbget + msgget ;
115            }
116        }
117    }
118
119    // DEBUG
120    // Do a checksum of the message and log it.
121    int i, c;
122    c = 0;
123    for (i = 0; i < msglen; i++) {
124      c += (int)buffer[i];
125    }
126    PRINTMESSAGE(stdout, CASE_NORMAL, 0, timestamp, "readmessage: %d, chksum: %d\n", msglen, c);
127
128    return(0) ;
129
130}
131int discardmessage(int sock,int msglen,int to,int fromchild) 
132{
133    int    nbget ;
134    int    retcode ;
135    int    nfds ;
136    fd_set selectmask ; /* Select mask */
137    struct timeval    wait_timer;
138    char    buffer[256] ;
139    char    ent[40] ;
140
141    // DEBUG
142    // Do a checksum of the message and log it.
143    PRINTMESSAGE(stdout, CASE_NORMAL, 0, timestamp, "discardmessage: %d\n", msglen);
144
145
146    if ( fromchild == 1 ) {
147        sprintf(ent,"Child %06d : ",getpid()) ;
148    } else {
149        strcpy(ent,"") ;
150    }
151   
152    /*
153    ** We are going to read buflen by buflen till the message
154    ** is exhausted
155    */
156   
157    nbget = 0 ;
158    while ( nbget < msglen ) {
159        nfds = sysconf(_SC_OPEN_MAX) ;
160        FD_ZERO(&selectmask) ;
161        FD_SET(sock,&selectmask) ;
162        wait_timer.tv_sec  = to ;
163        wait_timer.tv_usec = 0 ;
164        if ( (retcode = select(FD_SETSIZE,&selectmask,0,0,&wait_timer) ) == -1 ) {
165            /*
166            ** Select error
167            */
168            if (debug ) 
169                PRINTMESSAGE(stderr,CASE_NORMAL,0,timestamp,"%sDiscard message :Discard message : Select error : MSG (%d,%d)",ent,msglen,nbget) ;
170            return -1 ;
171        } else if ( retcode == 0 ) {
172            if (debug ) 
173                PRINTMESSAGE(stderr,CASE_NORMAL,0,timestamp,"%sDiscard message :Discard message : Time out : MSG (%d,%d)",ent,msglen,nbget) ;
174            return -1 ;
175        } else {
176            retcode = read(sock,buffer,sizeof(buffer)) ;
177            if ( retcode < 0 ) {
178                if (debug ) 
179                    PRINTMESSAGE(stderr,CASE_NORMAL,0,timestamp,"%sDiscard message :Discard message : Receive error : MSG (%d,%d) : %s",ent,msglen,nbget,strerror(errno)) ;
180                return -1 ;
181            } else if ( retcode == 0 ) {
182                if (debug ) 
183                    PRINTMESSAGE(stderr,CASE_NORMAL,0,timestamp,"%sDiscard message :Discard message : Connexion breaks",ent) ;
184                return -1 ;
185            } else {
186                nbget = nbget + retcode ;
187            }
188        }
189    }
190    return(0) ;
191}
192int discardandprintmessage(int sock,int to,int fromchild) 
193{
194    int    retcode ;
195    int    nfds ;
196    fd_set selectmask ; /* Select mask */
197    struct timeval    wait_timer;
198    char    buffer[2] ;
199    char    ent[40] ;
200
201    if ( fromchild == 1 ) {
202        sprintf(ent,"Child %06d : ",getpid()) ;
203    } else {
204        strcpy(ent,"") ;
205    }
206   
207    /*
208    ** We are going to read buflen by buflen till the message
209    ** is exhausted
210    */
211   
212    while ( 1 == 1 ) {
213        nfds = sysconf(_SC_OPEN_MAX) ;
214        FD_ZERO(&selectmask) ;
215        FD_SET(sock,&selectmask) ;
216        wait_timer.tv_sec  = to ;
217        wait_timer.tv_usec = 0 ;
218        if ( (retcode = select(FD_SETSIZE,&selectmask,0,0,&wait_timer) ) == -1 ) {
219            /*
220            ** Select error
221            */
222            return -1 ;
223        } else if ( retcode == 0 ) {
224            return -1 ;
225        } else {
226            retcode = read(sock,buffer,sizeof(buffer)) ;
227            if ( retcode < 0 ) {
228                return -1 ;
229            } else if ( retcode == 0 ) {
230                return -1 ;
231            } else {
232                buffer[retcode] = '\0' ;
233                PRINTMESSAGE(stdout,CASE_NORMAL,0,timestamp,"%s",buffer) ;
234            }
235        }
236    }
237}
Note: See TracBrowser for help on using the repository browser.