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 <unistd.h>
00034
00035 #include "BESProcIdResponseHandler.h"
00036 #include "BESInfoList.h"
00037 #include "BESInfo.h"
00038 #include "BESResponseNames.h"
00039
00040 BESProcIdResponseHandler::BESProcIdResponseHandler( const string &name )
00041 : BESResponseHandler( name )
00042 {
00043 }
00044
00045 BESProcIdResponseHandler::~BESProcIdResponseHandler( )
00046 {
00047 }
00048
00049 char *
00050 BESProcIdResponseHandler::fastpidconverter(
00051 long val,
00052 char *buf,
00053 int base)
00054 {
00055 ldiv_t r;
00056
00057 if (base > 36 || base < 2)
00058 {
00059 *buf = '\0';
00060 return buf;
00061 }
00062 if (val < 0)
00063 *buf++ = '-';
00064 r = ldiv (labs(val), base);
00065
00066
00067
00068 if (r.quot > 0)
00069 buf = fastpidconverter ( r.quot, buf, base);
00070
00071
00072 *buf++ = "0123456789abcdefghijklmnopqrstuvwxyz"[(int)r.rem];
00073 *buf = '\0';
00074 return buf;
00075 }
00076
00092 void
00093 BESProcIdResponseHandler::execute( BESDataHandlerInterface &dhi )
00094 {
00095 BESInfo *info = BESInfoList::TheList()->build_info() ;
00096 _response = info ;
00097 dhi.action_name = PROCESS_RESPONSE_STR ;
00098 info->begin_response( PROCESS_RESPONSE_STR ) ;
00099 char mypid[12] ;
00100 fastpidconverter( getpid(), mypid, 10 ) ;
00101 info->add_tag( "pid", mypid ) ;
00102 info->end_response() ;
00103 }
00104
00117 void
00118 BESProcIdResponseHandler::transmit( BESTransmitter *transmitter,
00119 BESDataHandlerInterface &dhi )
00120 {
00121 if( _response )
00122 {
00123 BESInfo *info = dynamic_cast<BESInfo *>(_response) ;
00124 info->transmit( transmitter, dhi ) ;
00125 }
00126 }
00127
00134 void
00135 BESProcIdResponseHandler::dump( ostream &strm ) const
00136 {
00137 strm << BESIndent::LMarg << "BESProcIdResponseHandler::dump - ("
00138 << (void *)this << ")" << endl ;
00139 BESIndent::Indent() ;
00140 BESResponseHandler::dump( strm ) ;
00141 BESIndent::UnIndent() ;
00142 }
00143
00144 BESResponseHandler *
00145 BESProcIdResponseHandler::ProcIdResponseBuilder( const string &name )
00146 {
00147 return new BESProcIdResponseHandler( name ) ;
00148 }
00149