source: TI05-delivery/trunk/src/bbftp-server-3.2.0/bbftpd/bbftpd_message.c @ 1392

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI05-delivery/trunk/src/bbftp-server-3.2.0/bbftpd/bbftpd_message.c@1392
Revision 1392, 7.3 KB checked in by spascoe, 13 years ago (diff)

More missing #includes exposed when compiling on easterly.

Line 
1/*
2 * bbftpd/bbftpd_message.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 bbftpd_message.c   v 0.0.0  1999/11/24
27                    v 1.6.0  2000/03/24 - Take the readmessage routine from
28                                          bbftpc which is more flexible the
29                                          only difference is that this one is
30                                          logging into bbftpd_log
31                    v 1.6.1  2000/03/24 - Portage to OSF1
32                                        - Set the socket in non block mode
33                    v 1.8.7  2000/05/30 - Portage to IRIX64
34                    v 1.8.10 2000/08/11 - Portage to Linux
35                    v 1.9.0  2000/08/24 - Use configure to help port
36                    v 1.9.4  2000/10/16 - Supress %m
37                    v 2.0.0  2000/12/07 - Introduce discardmessage routine
38                                        - Replace recv by read for ssh mode
39                                          (Tim Adye)
40                    v 2.0.1 2001/04/23  - Correct indentation
41                    v 2.1.0 2001/06/01  - Set all messages routine in one
42                                          file
43
44*****************************************************************************/
45#include <bbftpd.h>
46
47#include <stdlib.h>
48
49#include <errno.h>
50
51#include <bbftpd_private_log.h>
52#if TIME_WITH_SYS_TIME
53# include <sys/time.h>
54# include <time.h>
55#else
56# if HAVE_SYS_TIME_H
57#  include <sys/time.h>
58# else
59#  include <time.h>
60# endif
61#endif
62#include <unistd.h>
63#include <utime.h>
64#if HAVE_STRING_H
65# include <string.h>
66#endif
67
68#include <netinet/in.h>
69#include <common.h>
70#include <daemon.h>
71#include <daemon_proto.h>
72#include <structures.h>
73
74extern int outcontrolsock ;
75extern  int     sendcontrolto ;
76
77int readmessage(int sock,char *buffer,int msglen,int to) 
78{
79    int    nbget ;
80    int    retcode ;
81    int        nfds ;
82    fd_set    selectmask ; /* Select mask */
83    struct timeval    wait_timer;
84
85    nbget = 0 ;
86/*
87** start the reading loop
88*/
89    while ( nbget < msglen ) {
90        nfds = sysconf(_SC_OPEN_MAX) ;
91        FD_ZERO(&selectmask) ;
92        FD_SET(sock,&selectmask) ;
93        wait_timer.tv_sec  = to ;
94        wait_timer.tv_usec = 0 ;
95        if ( (retcode = select(nfds,&selectmask,0,0,&wait_timer) ) == -1 ) {
96            /*
97            ** Select error
98            */
99            bbftpd_log(BBFTPD_ERR,"Read message : Select error : MSG (%d,%d)",msglen,nbget) ;
100            return -1 ;
101        } else if ( retcode == 0 ) {
102            bbftpd_log(BBFTPD_ERR,"Read message : Time out : MSG (%d,%d)",msglen,nbget) ;
103            return -1 ;
104        } else {
105            retcode = read(sock,&buffer[nbget],msglen-nbget) ;
106            if ( retcode < 0 ) {
107                bbftpd_log(BBFTPD_ERR,"Read message : Receive error : MSG (%d,%d) : %s",msglen,nbget,strerror(errno)) ;
108                return -1 ;
109            } else if ( retcode == 0 ) {
110                bbftpd_log(BBFTPD_ERR,"Read message : Connexion breaks") ;
111                return -1 ;
112            } else {
113                nbget = nbget + retcode ;
114            }
115        }
116    }
117    return(0) ;
118}
119
120int discardmessage(int sock,int msglen,int to) 
121{
122    int    nbget ;
123    int    retcode ;
124    int        nfds ;
125    fd_set    selectmask ; /* Select mask */
126    struct timeval    wait_timer;
127    char buffer[256] ;
128   
129    /*
130    ** We are going to read buflen by buflen till the message
131    ** is exhausted
132    */
133   
134    nbget = 0 ;
135    while ( nbget < msglen ) {
136        nfds = sysconf(_SC_OPEN_MAX) ;
137        FD_ZERO(&selectmask) ;
138        FD_SET(sock,&selectmask) ;
139        wait_timer.tv_sec  = to ;
140        wait_timer.tv_usec = 0 ;
141        if ( (retcode = select(nfds,&selectmask,0,0,&wait_timer) ) == -1 ) {
142            /*
143            ** Select error
144            */
145            bbftpd_log(BBFTPD_ERR,"Discard message : Select error : MSG (%d,%d)",msglen,nbget) ;
146            return -1 ;
147        } else if ( retcode == 0 ) {
148            bbftpd_log(BBFTPD_ERR,"Discard message : Time out : MSG (%d,%d)",msglen,nbget) ;
149            return -1 ;
150        } else {
151            retcode = recv(sock,buffer,sizeof(buffer),0) ;
152            if ( retcode < 0 ) {
153                bbftpd_log(BBFTPD_ERR,"Discard message : Receive error : MSG (%d,%d) : %s",msglen,nbget,strerror(errno)) ;
154                return -1 ;
155            } else if ( retcode == 0 ) {
156                bbftpd_log(BBFTPD_ERR,"Discard message : Connexion breaks") ;
157                return -1 ;
158            } else {
159                nbget = nbget + retcode ;
160            }
161        }
162    }
163    return(0) ;
164}
165       
166int writemessage(int sock,char *buffer,int msglen,int to) 
167{
168    int    nbsent ;
169    int    retcode ;
170    int        nfds ;
171    fd_set    selectmask ; /* Select mask */
172    struct timeval    wait_timer;
173
174    nbsent = 0 ;
175/*
176** start the writing loop
177*/
178    while ( nbsent < msglen ) {
179        nfds = sysconf(_SC_OPEN_MAX) ;
180        FD_ZERO(&selectmask) ;
181        FD_SET(sock,&selectmask) ;
182        wait_timer.tv_sec  = to ;
183        wait_timer.tv_usec = 0 ;
184        if ( (retcode = select(nfds,0,&selectmask,0,&wait_timer) ) == -1 ) {
185            /*
186            ** Select error
187            */
188            bbftpd_log(BBFTPD_ERR,"Write message : Select error : MSG (%d,%d)",msglen,nbsent) ;
189            return -1 ;
190        } else if ( retcode == 0 ) {
191            bbftpd_log(BBFTPD_ERR,"Write message : Time out : MSG (%d,%d)",msglen,nbsent) ;
192            return -1 ;
193        } else {
194            retcode = write(sock,&buffer[nbsent],msglen-nbsent) ;
195            if ( retcode < 0 ) {
196                bbftpd_log(BBFTPD_ERR,"Write message : write error : MSG (%d,%d) : %s",msglen,nbsent,strerror(errno)) ;
197                return -1 ;
198            } else if ( retcode == 0 ) {
199                bbftpd_log(BBFTPD_ERR,"Write message : Connexion breaks") ;
200                return -1 ;
201            } else {
202                nbsent = nbsent + retcode ;
203            }
204        }
205    }
206    return(0) ;
207}
208
209void reply(int n, char *str)
210{
211    struct message    *mess ;
212    int    lentosend ;
213    char buf[MINMESSLEN] ;
214   
215    mess = (struct message *) buf ;
216    mess->code = n ;
217#ifndef WORDS_BIGENDIAN
218    mess->msglen = ntohl(strlen(str)) ;
219#else
220    mess->msglen = strlen(str) ;
221#endif
222    if ( writemessage(outcontrolsock,buf,MINMESSLEN,sendcontrolto) < 0 ) {
223        bbftpd_log(BBFTPD_ERR,"Error on reply") ;
224        clean_child() ;
225        exit(1) ;
226    }
227    lentosend = strlen(str) ;
228    if ( writemessage(outcontrolsock,str,lentosend,sendcontrolto) < 0 ) {
229        bbftpd_log(BBFTPD_ERR,"Error on reply") ;
230        clean_child() ;
231        exit(1) ;
232    }
233}
234 
Note: See TracBrowser for help on using the repository browser.