void generateRosMessage(const field &groups) { mkdir("../src/to_ros_data_handler/msg",0775); ofstream msgFile("../src/to_ros_data_handler/msg/Data.msg"); if (msgFile.is_open()) { for ( auto &header : groups) { msgFile << convertToRos(header.second) << " " << header.first << endl; } } mkdir("../src/to_ros_data_handler/include",0775); ofstream getter("../src/to_ros_data_handler/include/generatedGetter.h"); if (getter.is_open()) { getter << "#include <string>" << endl << "#include <sstream>" << endl << "#include \"to_ros_data_handler/Data.h\"" << endl; getter << "using namespace std;" << endl; getter << "void getNames(to_ros_data_handler::Data &msg, string data)" << endl << "{" << endl; getter << "stringstream in(data);" << endl; getter << "in "; for (auto &header : groups) { if (header.second == "bool") getter << " >> std::boolalpha"; getter << " >> msg." << header.first; } getter << ";" << endl; getter << "}"; } }
int MAMessenger::logMsg (MHL7Msg& message, const MString& event, char* hl7Type) { int logdirLen = mLogDir.size() + 1; int eventLen = event.size() + 1; char logdir[logdirLen]; char eventstr[eventLen]; event.safeExport(eventstr, eventLen); mLogDir.safeExport(logdir, logdirLen); sprintf (mStream, "%s/msg%d_%s.%s", logdir, ++gMsgNumber, eventstr, hl7Type); ofstream msgFile (mStream, ios::out | ios::trunc | ios::binary); { MLogClient logClient; char x[512]; sprintf(x, "Log %s message to: %s", hl7Type, mStream); logClient.log(MLogClient::MLOG_VERBOSE, "<no peer>", "MAMessenter::logMsg", __LINE__, x); } int length=0; message.exportToWire (mStream, mStreamSize, length); msgFile << mStream << endl; return 0; }
int MAMessenger::logMsg (MHL7Msg& message, const MString& event, char* hl7Type) { int logdirLen = mLogDir.size() + 1; int eventLen = event.size() + 1; char logdir[logdirLen]; char eventstr[eventLen]; event.safeExport(eventstr, eventLen); mLogDir.safeExport(logdir, logdirLen); sprintf (mStream, "%s/msg%d_%s.%s", logdir, ++gMsgNumber, eventstr, hl7Type); ofstream msgFile (mStream, ios::out | ios::trunc | ios::binary); int length=0; message.exportToWire (mStream, mStreamSize, length); msgFile << mStream << endl; cout << "(Analysis Messenger) Logged " << hl7Type << " message to file.\n"; return 0; }
ERYDBErrorInfo::ERYDBErrorInfo() { Config* cf = Config::makeConfig(); string configFile(cf->getConfig("SystemConfig", "ErrorMessageFile")); if (configFile.length() == 0) configFile = startup::StartUp::installDir() + "/etc/ErrorMessage.txt"; ifstream msgFile(configFile.c_str()); while (msgFile.good()) { stringbuf* sb = new stringbuf; msgFile.get(*sb); string m = sb->str(); delete sb; if (m.length() > 0 && m[0] != '#') { typedef boost::tokenizer<boost::char_separator<char> > tokenizer; boost::char_separator<char> sep("\t"); tokenizer tokens(m, sep); tokenizer::iterator tok_iter = tokens.begin(); if (tok_iter != tokens.end()) { int msgid = atoi(tok_iter->c_str()); ++tok_iter; if (tok_iter != tokens.end()) { ++tok_iter; if (tok_iter != tokens.end()) { string msgtext = *tok_iter; fErrMap[msgid] = msgtext; } } } } ios_base::iostate st = msgFile.rdstate(); if ((st & ios_base::failbit) && !(st & ios_base::eofbit)) msgFile.clear(); (void)msgFile.get(); } }
/* * actually return the body pieces */ void fetchBody(Msg *m, Fetch *f) { Pair p; char *s, *t, *e, buf[BufSize + 2]; ulong n, start, stop, pos; int fd, nn; if(m == nil) { fetchBodyStr(f, "", 0); return; } switch(f->part) { case FPHeadFields: case FPHeadFieldsNot: n = m->head.size + 3; s = emalloc(n); n = selectFields(s, n, m->head.buf, f->hdrs, f->part == FPHeadFields); fetchBodyStr(f, s, n); free(s); return; case FPHead: fetchBodyStr(f, m->head.buf, m->head.size); return; case FPMime: fetchBodyStr(f, m->mime.buf, m->mime.size); return; case FPAll: fd = msgFile(m, "rawbody"); if(fd < 0) { msgDead(m); fetchBodyStr(f, "", 0); return; } p = fetchBodyPart(f, msgSize(m)); start = p.start; if(start < m->head.size) { stop = p.stop; if(stop > m->head.size) stop = m->head.size; Bwrite(&bout, &m->head.buf[start], stop - start); start = 0; stop = p.stop; if(stop <= m->head.size) { close(fd); return; } } else start -= m->head.size; stop = p.stop - m->head.size; break; case FPText: fd = msgFile(m, "rawbody"); if(fd < 0) { msgDead(m); fetchBodyStr(f, "", 0); return; } p = fetchBodyPart(f, m->size); start = p.start; stop = p.stop; break; default: fetchBodyStr(f, "", 0); return; } /* * read in each block, convert \n without \r to \r\n. * this means partial fetch requires fetching everything * through stop, since we don't know how many \r's will be added */ buf[0] = ' '; for(pos = 0; pos < stop; ) { n = BufSize; if(n > stop - pos) n = stop - pos; n = read(fd, &buf[1], n); if(n <= 0) { fetchBodyFill(stop - pos); break; } e = &buf[n + 1]; *e = '\0'; for(s = &buf[1]; s < e && pos < stop; s = t + 1) { t = memchr(s, '\n', e - s); if(t == nil) t = e; n = t - s; if(pos < start) { if(pos + n <= start) { s = t; pos += n; } else { s += start - pos; pos = start; } n = t - s; } nn = n; if(pos + nn > stop) nn = stop - pos; if(Bwrite(&bout, s, nn) != nn) writeErr(); pos += n; if(*t == '\n') { if(t[-1] != '\r') { if(pos >= start && pos < stop) Bputc(&bout, '\r'); pos++; } if(pos >= start && pos < stop) Bputc(&bout, '\n'); pos++; } } buf[0] = e[-1]; } close(fd); }