コード例 #1
0
ファイル: liss2orb.c プロジェクト: battistuz/antelope_contrib
static int 
getpkt (Bns *bns, char **seedp, int fixedsize, int *pktsize, int *seedsize) 
{
    int retcode ;
    if ( fixedsize != 0 ) {
	SIZE_BUFFER (char *, *seedp, *seedsize, fixedsize ) ; 
	retcode = bnsget(bns, *seedp, BYTES, fixedsize ) ;
	*pktsize = fixedsize ;
    } else if ( (retcode = bnsget ( bns, *seedp, BYTES, 64 )) == 0 ) {
コード例 #2
0
int
main (int argc, char **argv)
{
    int		   c ;
    char           *liss_server ;
    int            timeout = 10;
    int		   verbose = 0 ;
    int		   defaultport = 4000 ;
    unsigned char *seed ;
    int 	   fd = -1 ;
    Bns 	   *bns=0 ;

    elog_init (argc, argv);
    announce(0,0) ;

    while ((c = getopt (argc, argv, "v")) != -1) {
	switch (c) {

	  case 'v':
	    verbose++ ;
	    break;

	  default:
	    usage ();
	}
    }
    if (argc - optind < 1)
	usage ();

    allot(unsigned char *, seed, SIZE) ; 
    for(;optind < argc;optind++) { 
	liss_server = argv[optind] ;
	elog_notify(0, "opening %s\n", liss_server) ; 
	fd = open_socket ( liss_server, defaultport ) ; 
	if ( fd < 0 ) { 
	    elog_complain ( 1, "Can't open liss server %s", liss_server ) ;
	} else { 
	    int out ;
	    bns = bnsnew(fd, 8192) ;
	    bnsuse_sockio(bns) ;
	    bnstimeout ( bns, timeout*1000 ) ;
	    bnsclr(bns) ;
	    bns->fd = fd ; 
	    elog_notify(0, "reading %d bytes from %s\n", SIZE, liss_server) ; 
	    if ( bnsget(bns, seed, BYTES, SIZE ) == 0 ) { 
		out = open(liss_server, O_WRONLY | O_CREAT, 0664 ) ;
		if ( out == 0 ) { 
		    elog_die (0, "Can't open %s to write", liss_server) ;
		}
		elog_notify(0, "writing %d bytes from %s\n", SIZE, liss_server) ; 
		if ( write(out, seed, SIZE) != SIZE ) { 
		   elog_complain(0, "failed to write %d bytes to %s", SIZE, liss_server) ; 
		}
		if ( close(out) != 0 ) { 
		    elog_complain(0, "failed to close %s", liss_server) ; 
		}
	    } else { 
		elog_complain(0, "Failed to read data from %s", liss_server) ; 
	    }
	    if ( bnsclose(bns) != 0 ) { 
		elog_complain(0, "failed to close bns #%d for %s", fd, liss_server) ; 
	    }
	}
    }

    return 0 ;
}
コード例 #3
0
ファイル: ryo2orb.c プロジェクト: battistuz/antelope_contrib
int
more_packet_data( ImportThread *it )
{
	int	rc;
	unsigned char	c;
	int	bns_errno;
	unsigned char bytecount[2];
	unsigned char *bytecountp;
	int	retcode = 0;

	while( ( rc = bnsget( it->bnsin, &c, BYTES, 1 ) ) == 0 ) {

		switch( it->sync_state ) {

		case STREAM_SEARCH: 

			if( c == 0x9c ) {
				
				it->nbytes = 0;

				APPEND_BUFFER( it->buf, it->bufsize, it->nbytes, c );

				it->sync_state = STREAM_CONFIRM;

			} else {

				BAD_BYTE( "search", c );
			}

			break;

		case STREAM_CONFIRM: 

			if( c == 0xa5 ) {
				
				APPEND_BUFFER( it->buf, it->bufsize, it->nbytes, c );

				it->sync_state = STREAM_ACCUMULATE;

				bnsget( it->bnsin, bytecount, BYTES, 1 );
				bnsget( it->bnsin, bytecount+1, BYTES, 1 );

				APPEND_BUFFER( it->buf, it->bufsize, it->nbytes, bytecount[0] );
				APPEND_BUFFER( it->buf, it->bufsize, it->nbytes, bytecount[1] );

				bytecountp = &bytecount[0];
				vs2hs( &bytecountp, &it->intake_packet_bytecount, 1 );

				if( VeryVerbose ) {

					elog_notify( 0, 
					  "Receiving a %d-byte packet...\n",
					  it->intake_packet_bytecount );

				}

			} else {

				it->sync_state = STREAM_SEARCH;

				it->nbytes = 0;

				BAD_BYTE( "search", c );
			}

			break;
	
		case STREAM_ACCUMULATE:

			APPEND_BUFFER( it->buf, it->bufsize, it->nbytes, c );

			if( it->nbytes == it->intake_packet_bytecount ) {

				it->sync_state = STREAM_SEARCH;

				return 1;
			}

			break;

		default:

			BAD_BYTE( "default", c );

			it->sync_state = STREAM_SEARCH;

			break;
		}
	}

	if( bnserr( it->bnsin ) != 0 ) {
			
		bns_errno = bnserrno( it->bnsin );

		if( Verbose ) {

		  if( bns_errno == ECONNRESET ) {

			elog_complain( 1, 
				  "'%s': Connection reset by peer\n",
				  it->name );

		  } else {

			elog_complain( 1, 
				  "'%s': bns error %d\n", 
				  it->name, bns_errno );
		  }
		}

		retcode = -1;

	} else if( bnseof( it->bnsin ) ) {

		if( Verbose ) {

			elog_complain( 1, 
				  "'%s': Connection closed by remote "
				  "export module\n",
				  it->name );
		}

		retcode = -1;
	}

	return retcode;
}