Ejemplo n.º 1
0
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 << "}"; 
    }
}
Ejemplo n.º 2
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);
  {
    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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
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();
	}
}
Ejemplo n.º 5
0
/*
 * 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);
}