00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "config.h"
00034
00035 #include "BESProcIdResponseHandler.h"
00036 #include "BESInfoList.h"
00037 #include "BESInfo.h"
00038 #include "BESResponseNames.h"
00039
00040 #include <cstdlib>
00041 #if HAVE_UNISTD_H
00042 #include <unistd.h>
00043 #endif
00044
00045 BESProcIdResponseHandler::BESProcIdResponseHandler( const string &name )
00046 : BESResponseHandler( name )
00047 {
00048 }
00049
00050 BESProcIdResponseHandler::~BESProcIdResponseHandler( )
00051 {
00052 }
00053
00054 char *
00055 BESProcIdResponseHandler::fastpidconverter(
00056 long val,
00057 char *buf,
00058 int base)
00059 {
00060 ldiv_t r;
00061
00062 if (base > 36 || base < 2)
00063 {
00064 *buf = '\0';
00065 return buf;
00066 }
00067 if (val < 0)
00068 *buf++ = '-';
00069 r = ldiv (labs(val), base);
00070
00071
00072
00073 if (r.quot > 0)
00074 buf = fastpidconverter ( r.quot, buf, base);
00075
00076
00077 *buf++ = "0123456789abcdefghijklmnopqrstuvwxyz"[(int)r.rem];
00078 *buf = '\0';
00079 return buf;
00080 }
00081
00093 void
00094 BESProcIdResponseHandler::execute( BESDataHandlerInterface &dhi )
00095 {
00096 BESInfo *info = BESInfoList::TheList()->build_info() ;
00097 _response = info ;
00098 dhi.action_name = PROCESS_RESPONSE_STR ;
00099 info->begin_response( PROCESS_RESPONSE_STR ) ;
00100 char mypid[12] ;
00101 fastpidconverter( getpid(), mypid, 10 ) ;
00102 info->add_tag( "pid", mypid ) ;
00103 info->end_response() ;
00104 }
00105
00118 void
00119 BESProcIdResponseHandler::transmit( BESTransmitter *transmitter,
00120 BESDataHandlerInterface &dhi )
00121 {
00122 if( _response )
00123 {
00124 BESInfo *info = dynamic_cast<BESInfo *>(_response) ;
00125 info->transmit( transmitter, dhi ) ;
00126 }
00127 }
00128
00135 void
00136 BESProcIdResponseHandler::dump( ostream &strm ) const
00137 {
00138 strm << BESIndent::LMarg << "BESProcIdResponseHandler::dump - ("
00139 << (void *)this << ")" << endl ;
00140 BESIndent::Indent() ;
00141 BESResponseHandler::dump( strm ) ;
00142 BESIndent::UnIndent() ;
00143 }
00144
00145 BESResponseHandler *
00146 BESProcIdResponseHandler::ProcIdResponseBuilder( const string &name )
00147 {
00148 return new BESProcIdResponseHandler( name ) ;
00149 }
00150