00001 #include "StMessMgr.h"
00002 #include <string.h>
00003
00004 #ifdef __ROOT__
00005 ClassImp(StMessMgr)
00006 #endif
00007
00008 StMessMgr* gMessMgr = 0;
00009 StMessage* endm = 0;
00010 StMessage* gMessage = 0;
00011
00012
00013 StMessMgr::StMessMgr() : ostrstream() {}
00014
00015
00016
00017
00018 StMessMgr* StMessMgr::CurrentMessager() { return gMessMgr;}
00019
00020 StMessMgr* StMessMgr::Instance() { return (gMessMgr)?gMessMgr->Instantiate():0;}
00021
00022 StMessMgr* StMessMgr::Instance(const char *loggerName)
00023 {return (gMessMgr)?gMessMgr->Instantiate(loggerName):0; }
00024
00025 StMessMgr* StMessMgr::SetCurrentMessager(StMessMgr *mgr)
00026 {
00027
00028 StMessMgr* old = gMessMgr;
00029 gMessMgr=mgr;
00030 return old;
00031 }
00032
00033 StMessMgr* StMessMgr::Instantiate() {return gMessMgr; }
00034
00035 StMessMgr* StMessMgr::Instantiate(const char *){return Instantiate();}
00036
00037
00038 bool StMessMgr::isDebugEnabled() const{ return true; }
00039
00040 bool StMessMgr::isWarnEnabled() const{ return true; }
00041
00042 bool StMessMgr::isWarningEnabled() const{ return isWarnEnabled(); }
00043
00044 bool StMessMgr::isErrorEnabled() const{ return true; }
00045
00046 bool StMessMgr::isInfoEnabled() const{ return true; }
00047
00048 bool StMessMgr::isFatalEnabled() const{ return true; }
00049
00050 bool StMessMgr::isEnabledFor() const{ return true; }
00051
00052 bool StMessMgr::isQAInfoEnabled() const{ return true; }
00053
00054 bool StMessMgr::isUCMInfoEnabled()const{ return true; }
00055
00056
00057
00058
00059 static const char defaultMessType = 'I';
00060 static char emptyString[] = "";
00061 static char oOpt[] = "O";
00062 static char otsOpt[] = "OTS";
00063 static char eOpt[] = "E";
00064 static char nullMess[] = "Null message!!!";
00065 #ifdef __linux__
00066 static int sMessLength;
00067 #endif
00068
00069 void type_of_call Message_(const char* mess, int* lines, int*, size_t len) {
00070 static char space = ' ';
00071 static const char* messReturnChar = "\n";
00072 size_t messSize = strlen(mess);
00073 char* mess2=const_cast<char*> (mess);
00074 int del_mess = 0;
00075 if (*lines>1) {
00076 char* mess1 = const_cast<char*> (mess);
00077 mess2 = new char[messSize];
00078 *mess2 = 0;
00079 for (int i=(*lines); i>0; i--) {
00080 int clen = len;
00081 while (mess1[--clen] == space) {}
00082 strncat(mess2,mess1,(++clen));
00083 if (i>1) {
00084 strcat(mess2,messReturnChar);
00085 mess1 = &(mess1[len]);
00086 }
00087 }
00088 strcat(mess2,emptyString);
00089 del_mess = 1;
00090 } else {
00091 #ifdef __linux__
00092 sMessLength = len;
00093 #endif
00094 if ((len>1) && (messSize > len)) {
00095 mess2 = new char[(len+1)];
00096 strncpy(mess2,mess,len);
00097 mess2[len]=0;
00098 del_mess = 1;
00099 }
00100 }
00101 gMessMgr->Message(mess2);
00102 if (del_mess) delete [] mess2;
00103 }
00104
00105 void type_of_call Msg_Enable_(const char* mess, size_t len) {
00106 size_t messlen = strlen(mess);
00107 if ((len>1) && (messlen > len)) {
00108 char* mess2 = new char[(len+1)];
00109 strncpy(mess2,mess,len);
00110 mess2[len] = 0;
00111 gMessMgr->SwitchOn(mess2);
00112 delete [] mess2;
00113 } else {
00114 gMessMgr->SwitchOn(mess);
00115 }
00116 }
00117
00118 int type_of_call Msg_Enabled_(const char* mess, int*, size_t len) {
00119 size_t messlen = strlen(mess);
00120 int ret_val = 1;
00121 if ((len>1) && (messlen > len)) {
00122 char* mess2 = new char[(len+1)];
00123 strncpy(mess2,mess,len);
00124 mess2[len] = 0;
00125 if ((gMessMgr->GetLimit(mess2))==0) ret_val = 0;
00126 delete [] mess2;
00127 } else {
00128 if ((gMessMgr->GetLimit(mess))==0) ret_val = 0;
00129 }
00130 return ret_val;
00131 }
00132
00133 void type_of_call Msg_Disable_(const char* mess, size_t len) {
00134 size_t messlen = strlen(mess);
00135 if ((len>1) && (messlen > len)) {
00136 char* mess2 = new char[(len+1)];
00137 strncpy(mess2,mess,len);
00138 mess2[len] = 0;
00139 gMessMgr->SwitchOff(mess2);
00140 delete [] mess2;
00141 } else {
00142 gMessMgr->SwitchOff(mess);
00143 }
00144 }
00145
00146 void type_of_call MessageOut( const char *msg ) {
00147 gMessMgr->Message(msg);
00148 }
00149
00150 void type_of_call StCaller(const char* mess, const char* typString,
00151 const char* opt, size_t len) {
00152 #ifdef __linux__
00153 sMessLength = len;
00154 #endif
00155 if (mess[0]==0) {
00156 gMessMgr->Message(nullMess,"E",eOpt);
00157 return;
00158 }
00159
00160 size_t messlen = strlen(mess);
00161 if ((len>1) && (messlen > len)) messlen = len;
00162 char* mess2 = new char[(messlen+1)];
00163 strncpy(mess2,mess,messlen);
00164 mess2[messlen] = 0;
00165
00166 gMessMgr->Message(mess2,typString,opt);
00167 delete [] mess2;
00168 }
00169
00170 void type_of_call StCallerOpt(const char* mess, const char* typString,
00171 const char* opt, size_t len1, size_t len2,
00172 char* optString) {
00173 char* opt2=const_cast<char*> (opt);
00174 int del_opt=0;
00175
00176 if (len2<=0) {
00177 opt2=optString;
00178 } else if (strlen(opt) > len2) {
00179 opt2 = new char[(len2+1)];
00180 strncpy(opt2,opt,len2);
00181 opt2[len2]=0;
00182 del_opt = 1;
00183 }
00184
00185 StCaller(mess,typString,opt2,len1);
00186 if (del_opt) delete [] opt2;
00187 }
00188
00189 void type_of_call StMessage_(const char* mess, const char* type,
00190 const char* opt, size_t len1,
00191 size_t len2, size_t len3) {
00192 char* type2=const_cast<char*> (type);
00193 int del_type=0;
00194
00195 if (len2<=0) {
00196 type2=emptyString;
00197 } else if (strlen(type) > len2) {
00198 type2 = new char[(len2+1)];
00199 strncpy(type2,type,len2);
00200 type2[len2]=0;
00201 del_type = 1;
00202 }
00203
00204 StCallerOpt(mess,type2,opt,len1,len3,oOpt);
00205 if (del_type) delete [] type2;
00206 }
00207
00208 void type_of_call StInfo_(const char* mess, size_t len) {
00209 StCaller(mess,"I",oOpt,len);
00210 }
00211
00212 void type_of_call StWarning_(const char* mess, size_t len) {
00213 StCaller(mess,"W",eOpt,len);
00214 }
00215
00216 void type_of_call StError_(const char* mess, size_t len) {
00217 StCaller(mess,"E",eOpt,len);
00218 }
00219
00220 void type_of_call StDebug_(const char* mess, size_t len) {
00221 StCaller(mess,"D",oOpt,len);
00222 }
00223
00224 void type_of_call QAInfo_(const char* mess, size_t len) {
00225 StCaller(mess,"Q",otsOpt,len);
00226 }
00227
00228 void type_of_call UCMInfo_(const char* mess, size_t len) {
00229 StCaller(mess,"U",otsOpt,len);
00230 }
00231
00232 void type_of_call StInfoOpt_(const char* mess, const char* opt,
00233 size_t len1, size_t len2) {
00234 StCallerOpt(mess,"I",opt,len1,len2,oOpt);
00235 }
00236
00237 void type_of_call StWarningOpt_(const char* mess, const char* opt,
00238 size_t len1, size_t len2) {
00239 StCallerOpt(mess,"W",opt,len1,len2,eOpt);
00240 }
00241
00242 void type_of_call StErrorOpt_(const char* mess, const char* opt,
00243 size_t len1, size_t len2) {
00244 StCallerOpt(mess,"E",opt,len1,len2,eOpt);
00245 }
00246
00247 void type_of_call StDebugOpt_(const char* mess, const char* opt,
00248 size_t len1, size_t len2) {
00249 StCallerOpt(mess,"D",opt,len1,len2,oOpt);
00250 }
00251
00252 void type_of_call QAInfoOpt_(const char* mess, const char* opt,
00253 size_t len1, size_t len2) {
00254 StCallerOpt(mess,"Q",opt,len1,len2,otsOpt);
00255 }
00256
00257 void type_of_call UCMInfoOpt_(const char* mess, const char* opt,
00258 size_t len1, size_t len2) {
00259 StCallerOpt(mess,"U",opt,len1,len2,otsOpt);
00260 }
00261
00262 void type_of_call StMessAddType_(const char* type, const char* text,
00263 size_t len1, size_t len2) {
00264 if (strlen(type) > len1) (const_cast<char*> (type))[len1] = 0;
00265 if (strlen(text) > len2) (const_cast<char*> (text))[len2] = 0;
00266 gMessMgr->AddType(type,text);
00267 }
00268
00269
00270