source: TI05-delivery/trunk/src/bbftp-client-3.2.0/bbftpc/bbftp_utils.c @ 1265

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

Messages from the client that were previously printed to stdout/stderr are now returned
in a list from python functions bbftpc.connect() and bbftpc.docommand().

Line 
1/*
2 * bbftpc/bbftp_utils.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 bbftp_utils.c v 2.0.0 2001/03/01   - Creation of the routines
27               v 2.0.1 2001/04/19   - Correct indentation
28               v 2.1.0 2001/05/29   - Add private authentication
29                                    - Add -m option
30                           v 2.2.0  2001/10/03  - Add certificate authentication
31
32*****************************************************************************/
33
34#include <signal.h>
35#include <stdarg.h>
36#include <stdio.h>
37
38#include <bbftp.h>
39#include <common.h>
40#include <client.h>
41#include <client_proto.h>
42#include <netinet/in.h>
43#include <structures.h>
44#include <config.h>
45#ifdef HAVE_BYTESWAP_H
46#include <byteswap.h>
47#endif
48
49extern  int     incontrolsock ;
50extern  int     outcontrolsock ;
51extern  int     sshchildpid  ;
52extern  char    *curfilename ;
53extern  char    *realfilename ;
54extern  int     *myports ;
55extern  int     *mysockets ;
56extern  char    *readbuffer ;
57extern  char    *compbuffer ;
58extern  int     *mychildren ;
59extern  int     debug ;
60extern  int     requestedstreamnumber ;
61
62my64_t convertlong(my64_t v) {
63    struct bb {
64        int    fb ;
65        int sb ;
66    } ;
67    struct bb *bbpt ;
68    int     tmp ;
69    my64_t    tmp64 ;
70   
71    tmp64 = v ;
72    bbpt = (struct bb *) &tmp64 ;
73    tmp = bbpt->fb ;
74    bbpt->fb = ntohl(bbpt->sb) ;
75    bbpt->sb = ntohl(tmp) ;   
76    return tmp64 ;
77}
78
79#ifndef HAVE_NTOHLL
80my64_t ntohll(my64_t v) {
81#ifdef HAVE_BYTESWAP_H
82    return bswap_64(v);
83#else
84    long lo = v & 0xffffffff;
85    long hi = v >> 32U;
86    lo = ntohl(lo);
87    hi = ntohl(hi);
88    return ((my64_t) lo) << 32U | hi;
89#endif
90}
91#define htonll ntohll
92#endif
93
94#ifndef NDG_PYTHON_EMBED
95void PRINTMESSAGE(FILE *strm , int flag, int errcode, int tok, char *fmt, ...) 
96{
97    va_list ap;
98    time_t  logtime ;
99    char    clogtime[50] ;
100   
101    va_start(ap,fmt);
102   
103    /*
104    ** If timestamp start to print the time
105    */
106    if (tok) {
107        /*
108        ** Get time
109        */
110        if ( time(&logtime) == -1 ) {
111            strcpy(clogtime,"") ;
112        } else {
113            if ( strftime(clogtime,sizeof(clogtime),"%a %b %d %H:%M:%S (%Z)",localtime(&logtime)) == 0 )    {
114                strcpy(clogtime,"") ;
115            }
116        }
117        /*
118        ** And print it
119        */
120        if ( strlen(clogtime) > 0 ) {
121            (void) fprintf(strm,"%s : ",clogtime) ;
122        }
123    }
124    /*
125    ** Check if it is an error
126    */
127    if ( flag == CASE_ERROR || flag == CASE_FATAL_ERROR ) {
128        /*
129        ** It is an error
130        */
131        (void) fprintf(strm,"BBFTP-ERROR-%05d : ",errcode) ;
132    } else if ( flag == CASE_WARNING ) {
133        /*
134        ** It is a warning
135        */
136        (void) fprintf(strm,"BBFTP-WARNING-%05d : ",errcode) ;
137    }
138    /*
139    ** And print the requested string
140    */
141    (void) vfprintf(strm, fmt, ap);
142    fflush(strm) ;
143    if ( flag == CASE_FATAL_ERROR ) {
144        /*
145        ** exit in case of error
146        */
147        exit(errcode) ;
148    }
149    va_end(ap);
150}
151#endif // NDG_PYTHON_EMBED
152
153void Usage() 
154{
155    printf("Usage bbftp -i inputfile | -e \"command line\" \n") ;
156#ifdef CERTIFICATE_AUTH
157    printf("           [-g service name]\n") ;
158    printf("           [-u username]\n") ;
159#else
160    printf("            -u username\n") ;
161#endif
162    printf("           [-b (background)]\n") ;
163#ifdef WITH_GZIP   
164    printf("           [-c (gzip compress)]\n") ;
165#endif   
166    printf("           [-D[min:max] (Domain of Ephemeral Ports) ]\n") ;
167    printf("           [-f errorfile]\n") ;
168#ifndef PRIVATE_AUTH
169    printf("           [-E server command for ssh]\n") ;
170    printf("           [-I ssh identity file]\n") ;
171    printf("           [-L ssh command]\n") ;
172    printf("           [-s (use ssh)]\n") ;
173    printf("           [-S (use ssh in batch mode)]\n") ;
174#else
175    printf("           [-P Private authentication string]\n") ;
176#endif
177/*#endif*/
178    printf("           [-m (special output for statistics)]\n") ;
179    printf("           [-n (simulation mode: no data written)]\n") ;
180    printf("           [-o outputfile]\n") ;
181    printf("           [-p number of // streams]\n") ;
182    printf("           [-q (for QBSS on)]\n") ;
183    printf("           [-r number of tries ]\n") ;
184    printf("           [-R .bbftprc filename]\n") ;
185    printf("           [-t (timestamp)]\n") ;
186    printf("           [-V (verbose)]\n") ;
187    printf("           [-w controlport]\n") ;
188    printf("           [-W (print warning to stderr) ]\n") ;
189    printf("           host\n") ;
190    printf("      or \n") ;
191    printf("      bbftp -v\n") ;
192}
193
194/*
195** Taken from Free Software Foundation
196*/
197void strip_trailing_slashes (char *path)
198{
199  int last;
200
201  last = strlen (path) - 1;
202  while (last > 0 && path[last] == '/')
203    path[last--] = '\0';
204}
205
206void bbftp_close_control() 
207{
208
209    close(incontrolsock) ;
210    if ( incontrolsock != outcontrolsock) close(outcontrolsock) ;
211    if ( sshchildpid != 0 ) {
212        kill(sshchildpid,SIGKILL) ;
213    }
214}
215void bbftp_free_all_var() 
216{
217
218    if ( myports != NULL ) {
219        free(myports) ;
220        myports = NULL ;
221    }
222     if ( mychildren != NULL ) {
223        free(mychildren) ;
224        mychildren = NULL ;
225    }
226   if ( realfilename != NULL ) {
227        free(realfilename) ;
228        realfilename = NULL ;
229    }
230    if ( curfilename != NULL ) {
231        free(curfilename) ;
232        curfilename = NULL ;
233    }
234    if ( mysockets != NULL ) {
235        free(mysockets) ;
236        mysockets = NULL ;
237    }
238    if ( readbuffer != NULL ) {
239        free(readbuffer) ;
240        readbuffer = NULL ;
241    }
242    if ( compbuffer != NULL ) {
243        free(compbuffer) ;
244        compbuffer = NULL ;
245    }
246}
247void bbftp_clean_child()
248{
249    int     *pidfree ;
250    int     i ;
251   
252    if (mychildren != NULL ) {
253        pidfree = mychildren ;
254        for ( i=0 ; i<requestedstreamnumber ; i++) {
255            if ( *pidfree != 0 ) {
256                if (debug) printf("Killing child %d\n",*pidfree) ; 
257                kill(*pidfree,SIGKILL) ;
258            }
259            *pidfree++ = 0 ;
260        }
261    }
262}
Note: See TracBrowser for help on using the repository browser.