コード例 #1
0
ファイル: idbug.cpp プロジェクト: bpow/irods
int
cleanUpAndExit() {
    sendXmsgInp_t sendXmsgInp;
    xmsgTicketInfo_t xmsgTicketInfo;
    int status;
    char buf[] = "QUIT";

    memset( &xmsgTicketInfo, 0, sizeof( xmsgTicketInfo ) );
    memset( &sendXmsgInp, 0, sizeof( sendXmsgInp ) );
    xmsgTicketInfo.sendTicket = 4;
    xmsgTicketInfo.rcvTicket = 4;
    xmsgTicketInfo.flag = 1;
    sendXmsgInp.ticket = xmsgTicketInfo;
    snprintf( sendXmsgInp.sendAddr, NAME_LEN, "%s:%i", myHostName, getpid() );
    sendXmsgInp.sendXmsgInfo.numRcv = 1;
    strcpy( sendXmsgInp.sendXmsgInfo.msgType, "QUIT" );
    sendXmsgInp.sendXmsgInfo.msg = buf;
    sendXmsgInp.sendXmsgInfo.msgNumber = myMNum;
    sendXmsgInp.sendXmsgInfo.miscInfo = strdup( "ERASE_MESSAGE" );
    status = rcSendXmsg( conn, &sendXmsgInp );
    if ( status < 0 ) {
        fprintf( stderr, "rsSendXmsg error for 4. status = %d\n", status );
    }

    sendIDebugCommand( "quit", "CMSG:QUIT" );

    rcDisconnect( conn );
    exit( 0 );
}
コード例 #2
0
ファイル: ixmsg.c プロジェクト: UPPMAX/irods
int 
sendIxmsg( rcComm_t **inconn, sendXmsgInp_t *sendXmsgInp){
  int status;
  int sleepSec = 1;
  rcComm_t *conn;

  conn = *inconn;

  while (connectFlag == 0) {
    conn = rcConnectXmsg (&myRodsEnv, &errMsg);
    if  (conn == NULL) {
      sleep(sleepSec);
      sleepSec = 2 * sleepSec;
      if (sleepSec > 10) sleepSec = 10;
      continue;
    }
    status = clientLogin(conn);
    if (status != 0) {
      rcDisconnect(conn);
      fprintf (stderr, "clientLogin error...Will try again\n");
      sleep(sleepSec);
      sleepSec = 2 * sleepSec;
      if (sleepSec > 10) sleepSec = 10;
      continue;
    }
    *inconn = conn;
    connectFlag = 1;
  }
  status = rcSendXmsg (conn, sendXmsgInp);
  /*  rcDisconnect(conn); **/
  if (status < 0) {
    fprintf (stderr, "rsSendXmsg error. status = %d\n", status);
    exit (9);
  }
  return(status);
}
コード例 #3
0
ファイル: idbug.cpp プロジェクト: bpow/irods
int
main( int argc, char **argv ) {

    signal( SIGPIPE, SIG_IGN );

    int status;
    int continueAllFlag = 0;
    int sleepSec = 1;
    int rNum = 1;
    int stdinflags;
    int verbose = 0;
    int opt;
    getXmsgTicketInp_t getXmsgTicketInp;
    xmsgTicketInfo_t xmsgTicketInfo;
    xmsgTicketInfo_t *outXmsgTicketInfo;
    sendXmsgInp_t sendXmsgInp;
    rcvXmsgInp_t rcvXmsgInp;
    rcvXmsgOut_t *rcvXmsgOut = NULL;
    char  ubuf[4000];

    /* set up signals */

#ifndef _WIN32
    signal( SIGINT, signalIdbugExit );
    signal( SIGHUP, signalIdbugExit );
    signal( SIGTERM, signalIdbugExit );
    signal( SIGUSR1, signalIdbugExit );
    /* XXXXX switched to SIG_DFL for embedded python. child process
     * went away. But probably have to call waitpid.
     * signal(SIGCHLD, SIG_IGN); */
    signal( SIGCHLD, SIG_DFL );
#endif


    while ( ( opt = getopt( argc, argv, "cChv:" ) ) != EOF ) {
        switch ( opt ) {
        case 'v':
            verbose = atoi( optarg );
            break;
        case 'c':
            continueAllFlag = 1;
            break;
        case 'C':
            continueAllFlag = 2;
            break;
        case 'h':
            printIdbugHelp( argv[0] );
            exit( 0 );
            break;
        default:
            fprintf( stderr, "Error: Unknown Option\n" );
            printIdbugHelp( argv[0] );
            exit( 1 );
            break;
        }
    }


    /* initialize and connect */
    snprintf( lastSent, HEADER_TYPE_LEN, "CMSG:BEGIN" );
    myHostName[0] = '\0';
    gethostname( myHostName, MAX_NAME_LEN );
    connectToX();

    memset( &xmsgTicketInfo, 0, sizeof( xmsgTicketInfo ) );
    memset( &getXmsgTicketInp, 0, sizeof( getXmsgTicketInp ) );

    /* get Ticket */
    getXmsgTicketInp.flag = 1;
    status = rcGetXmsgTicket( conn, &getXmsgTicketInp, &outXmsgTicketInfo );
    if ( status != 0 ) {
        fprintf( stderr, "Unable to get Xmsg Ticket. status = %d\n", status );
        exit( 8 );
    }
    fprintf( stdout, "Debug XMsg Stream= %i\n", outXmsgTicketInfo->sendTicket );
    streamId = outXmsgTicketInfo->sendTicket;


    /* Send STOP message on newly created Debug XMsg Stream */
    if ( continueAllFlag == 0 ) {
        status = sendIDebugCommand( "discontinue", "CMSG:BEGIN" );
    }
    else if ( continueAllFlag == 1 ) {
        status = sendIDebugCommand( "continue", "CMSG:BEGIN" );
    }
    else {
        status = sendIDebugCommand( "Continue", "CMSG:BEGIN" );
    }
    if ( status < 0 ) {
        fprintf( stderr, "Error sending Message to Debug Stream %i = %d\n",
                 streamId, status );
        exit( -1 );
    }


    /*
    memset (&sendXmsgInp, 0, sizeof (sendXmsgInp));
    xmsgTicketInfo.sendTicket = streamId;
    xmsgTicketInfo.rcvTicket = streamId;
    xmsgTicketInfo.flag = 1;
    sendXmsgInp.ticket = xmsgTicketInfo;
    snprintf(sendXmsgInp.sendAddr, NAME_LEN, "%s:%i", myHostName, getpid ());
    sendXmsgInp.sendXmsgInfo.numRcv = 100;
    sendXmsgInp.sendXmsgInfo.msgNumber = mNum;
    strcpy(sendXmsgInp.sendXmsgInfo.msgType, "idbug:client");
    snprintf(ubuf,3999, "stop");
    sendXmsgInp.sendXmsgInfo.msg = ubuf;
    status = sendIDebugCommand(&sendXmsgInp);
    mNum++;
    */

    /* Send Startup messages on Stream 4 */
    memset( &sendXmsgInp, 0, sizeof( sendXmsgInp ) );
    xmsgTicketInfo.sendTicket = 4;
    xmsgTicketInfo.rcvTicket = 4;
    xmsgTicketInfo.flag = 1;
    sendXmsgInp.ticket = xmsgTicketInfo;
    snprintf( sendXmsgInp.sendAddr, NAME_LEN, "%s:%i", myHostName, getpid() );
    sendXmsgInp.sendXmsgInfo.numRcv = 100;
    sendXmsgInp.sendXmsgInfo.msgNumber = 1;
    strcpy( sendXmsgInp.sendXmsgInfo.msgType, "STARTDEBUG" );
    snprintf( ubuf, 3999, "%i", outXmsgTicketInfo->sendTicket );
    sendXmsgInp.sendXmsgInfo.msg = ubuf;
    status = rcSendXmsg( conn, &sendXmsgInp );
    if ( status < 0 ) {
        fprintf( stderr, "Error sending Message to Stream 4 = %d\n", status );
        exit( -1 );
    }
    myMNum = status;

    /* switch off blocking for stdin */
    stdinflags = fcntl( 0, F_GETFL, 0 ); /* get current file status flags */
    stdinflags |= O_NONBLOCK;/* turn off blocking flag */
    if ( int status = fcntl( 0, F_SETFL, stdinflags ) ) { /* set up non-blocking read */
        fprintf( stderr, "fcntl failed with status: %d", status );
    }

    /* print to stdout */
    /*    printf("idbug> ");*/

    while ( 1 ) {
        /* check for user  input */
        ubuf[0] = '\0';
        if ( fgets( ubuf, 3999, stdin ) == NULL ) {
            if ( errno !=  EWOULDBLOCK ) {
                printf( "Exiting idbug\n" );
                cleanUpAndExit();
            }
        }
        else { /* got some user input */
            processUserInput( ubuf );
        }
        /* check for messages */
        ubuf[0] = '\0';
        memset( &rcvXmsgInp, 0, sizeof( rcvXmsgInp ) );
        rcvXmsgInp.rcvTicket = streamId;
        sprintf( rcvXmsgInp.msgCondition, "(*XSEQNUM >= %d) && (*XADDR != \"%s:%i\") ", rNum, myHostName, getpid() );

        status = getIDebugReply( &rcvXmsgInp, &rcvXmsgOut, 0 );
        if ( status == 0 ) {
            if ( verbose == 3 ) {
                printf( "%s:%s#%i::%s: %s",
                        rcvXmsgOut->sendUserName, rcvXmsgOut->sendAddr,
                        rcvXmsgOut->seqNumber, rcvXmsgOut->msgType, rcvXmsgOut->msg );
            }
            else if ( verbose == 2 ) {
                printf( "%s#%i::%s: %s",
                        rcvXmsgOut->sendAddr,
                        rcvXmsgOut->seqNumber, rcvXmsgOut->msgType, rcvXmsgOut->msg );
            }
            else if ( verbose == 1 ) {
                printf( "%i::%s: %s", rcvXmsgOut->seqNumber, rcvXmsgOut->msgType, rcvXmsgOut->msg );
            }
            else {
                printf( "%s: %s", rcvXmsgOut->msgType, rcvXmsgOut->msg );
            }
            if ( strstr( rcvXmsgOut->msg, "PROCESS BEGIN" ) != NULL ) {
                /*  printf(" FROM %s ", rcvXmsgOut->sendAddr); */
                storeSendAddr( rcvXmsgOut->sendAddr );
            }
            if ( strstr( rcvXmsgOut->msg, "PROCESS END" ) != NULL ) {
                printf( " FROM %s ", rcvXmsgOut->sendAddr );
                unstoreSendAddr( rcvXmsgOut->sendAddr );
            }
            if ( rcvXmsgOut->msg[strlen( rcvXmsgOut->msg ) - 1] != '\n' ) {
                printf( "\n" );
            }
            rNum  = rcvXmsgOut->seqNumber + 1;
            sleepSec = 1;
            free( rcvXmsgOut->msg );
            free( rcvXmsgOut );
            rcvXmsgOut = NULL;
            localStatus = 2;
        }
        else {
            sleep( sleepSec );
            sleepSec = 2 * sleepSec;
            /* if (sleepSec > 10) sleepSec = 10; */
            if ( sleepSec > 1 ) {
                sleepSec = 1;
            }
        }
    }
}
コード例 #4
0
ファイル: idbug.cpp プロジェクト: bpow/irods
int sendIDebugCommand( char *buf, char *hdr ) {
    int status, ii;
    static int mNum = 1;
    sendXmsgInp_t sendXmsgInp;
    xmsgTicketInfo_t xmsgTicketInfo;

    memset( &xmsgTicketInfo, 0, sizeof( xmsgTicketInfo ) );
    memset( &sendXmsgInp, 0, sizeof( sendXmsgInp ) );

    xmsgTicketInfo.sendTicket = streamId;
    xmsgTicketInfo.rcvTicket = streamId;
    xmsgTicketInfo.flag = 1;
    sendXmsgInp.ticket = xmsgTicketInfo;
    if ( strcmp( buf, "quit" ) == 0 ) {
        sendXmsgInp.sendXmsgInfo.miscInfo = strdup( "DROP_STREAM" );
    }
    snprintf( sendXmsgInp.sendAddr, NAME_LEN, "%s:%i", myHostName, getpid() );
    /***
    if (strstr(hdr, "ALL") != NULL)
      sendXmsgInp.sendXmsgInfo.numRcv = sendAddrInx;
    else
      sendXmsgInp.sendXmsgInfo.numRcv = 1;
    ***/
    sendXmsgInp.sendXmsgInfo.numRcv = 1;
    sendXmsgInp.sendXmsgInfo.msgNumber = mNum;
    sendXmsgInp.sendXmsgInfo.msg = buf;
    if ( strstr( hdr, "BEGIN" ) != NULL ) {
        sendXmsgInp.sendXmsgInfo.numRcv = 0;
        strcpy( sendXmsgInp.sendXmsgInfo.msgType, "CMSG:ALL" );
        /*	printf("*** Sending:%s::%s::%i\n",sendXmsgInp.sendXmsgInfo.msgType,sendXmsgInp.sendXmsgInfo.msg,sendXmsgInp.sendXmsgInfo.numRcv);*/
        status = rcSendXmsg( conn, &sendXmsgInp );
        if ( status < 0 ) {
            fprintf( stderr, "rsSendXmsg error for %i. status = %d\n",
                     streamId, status );
            return status;
        }
        mNum++;
    }
    else if ( strstr( hdr, "ALL" ) == NULL ) {
        snprintf( sendXmsgInp.sendXmsgInfo.msgType, sizeof( sendXmsgInp.sendXmsgInfo.msgType ), "%s", hdr );
        /*	printf("*** Sending:%s::%s::%i\n",sendXmsgInp.sendXmsgInfo.msgType,sendXmsgInp.sendXmsgInfo.msg,sendXmsgInp.sendXmsgInfo.numRcv);*/
        status = rcSendXmsg( conn, &sendXmsgInp );
        if ( status < 0 ) {
            fprintf( stderr, "rsSendXmsg error for %i. status = %d\n",
                     streamId, status );
            return status;
        }
        mNum++;
    }
    else {
        for ( ii = 0; ii < sendAddrInx ; ii++ ) {
            if ( sendAddr[ii] != NULL ) {
                snprintf( hdr, HEADER_TYPE_LEN, "CMSG:%s", sendAddr[ii] );
                snprintf( sendXmsgInp.sendXmsgInfo.msgType, sizeof( sendXmsgInp.sendXmsgInfo.msgType ), "%s", hdr );
                /*	printf("*** Sending:%s::%s::%i\n",sendXmsgInp.sendXmsgInfo.msgType,sendXmsgInp.sendXmsgInfo.msg,sendXmsgInp.sendXmsgInfo.numRcv);*/
                status = rcSendXmsg( conn, &sendXmsgInp );
                if ( status < 0 ) {
                    fprintf( stderr, "rsSendXmsg error for %i. status = %d\n",
                             streamId, status );
                    return status;
                }
                mNum++;
            }
        }
    }
    return 0;
}