#include "niml.h"

#undef  AFNI_SERVER
#undef  AFNI_REQUEST

/*! Stream name to connect to AFNI server. */

#define AFNI_SERVER  "tcp:afni.nimh.nih.gov:80"

/*! Format for AFNI logging request. */

#define AFNI_REQUEST "HEAD /AFNIlogpath HTTP/1.0\r\n"  \
                     "User-Agent: %s\r\n\r\n"

/*------------------------------------------------------------------------*/
/*! Log the input string to the AFNI server.  Sends an HTTP request with
    the input string as the 'user agent', which will be saved in the
    Web server logs.
--------------------------------------------------------------------------*/

void AFNI_serverlog( char *str )
{
   pid_t child_pid ;
   NI_stream ns ;
   int nbuf=0 , jj ;
   char *sbuf , *rbuf , *ss ;

   if( str == NULL || *str == '\0'      ) return ;
   if( AFNI_noenv("AFNI_VERSION_CHECK") ) return ;

   /*-- start the child process --*/

   child_pid = fork() ;
   if( child_pid != (pid_t)0 ) return ;   /* parent is done */

   /*-- child will never return alive! --*/

   /* open stream to server */

   ns = NI_stream_open( AFNI_SERVER , "w" ) ;
   if( ns == (NI_stream)NULL ) _exit(0) ;

   /* copy input string, replace bad chars with spaces */

   sbuf = strdup(str) ;
   for( ss=sbuf ; *ss != '\0' ; ss++ ) if( !isgraph(*ss) ) *ss = ' ' ;

   /* truncate trailing spaces */

   nbuf = strlen(sbuf) ;
   for( ss=sbuf+(nbuf-1) ; isspace(*ss) ; ss-- ) *ss = '\0' ;

   /* build request to AFNI server */

   nbuf = strlen(sbuf)+strlen(AFNI_REQUEST)+32 ;
   rbuf = (char *)malloc(nbuf) ;
   sprintf(rbuf,AFNI_REQUEST,sbuf) ;

   /* wait for stream to get good for writing */

   jj = NI_stream_writecheck( ns , 1234 ) ;
   if( jj < 1 ) _exit(0) ;

   /* send the request */

   NI_stream_write( ns , rbuf , strlen(rbuf) ) ;

   /* don't read response: wait a decent interval, close connection, quit */

   NI_sleep(1) ; NI_stream_closenow(ns) ; _exit(0) ;
}


syntax highlighted by Code2HTML, v. 0.9.1