00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "Universal_AMOS.hh"
00011 using namespace AMOS;
00012 using namespace std;
00013
00014
00015
00016
00017
00018 const NCode_t Universal_t::NCODE = M_UNIVERSAL;
00019
00020
00021
00022 void Universal_t::readMessage (const Message_t & msg)
00023 {
00024 clear( );
00025
00026 try {
00027 istringstream ss;
00028
00029 if ( msg . exists (F_IID) )
00030 {
00031 ss . str (msg . getField (F_IID));
00032 ss >> iid_m;
00033 if ( !ss )
00034 AMOS_THROW_ARGUMENT ("Invalid iid format");
00035 ss . clear( );
00036 }
00037
00038 if ( msg . exists (F_EID) )
00039 eid_m = msg . getField (F_EID);
00040
00041 if ( msg . exists (F_STATUS) )
00042 {
00043 ss . str (msg . getField (F_STATUS));
00044 setStatus (ss . get( ));
00045 ss . clear( );
00046 }
00047
00048 if ( msg . exists (F_COMMENT) )
00049 comment_m = msg . getField (F_COMMENT);
00050
00051 if ( msg . exists (F_FLAG) )
00052 {
00053 char fA, fB;
00054 ss . str (msg . getField (F_FLAG));
00055 ss >> fA >> fB;
00056 setFlagA ( fA == '1' );
00057 setFlagB ( fB == '1' );
00058 if ( !ss )
00059 AMOS_THROW_ARGUMENT ("Invalid flag format");
00060 ss . clear( );
00061 }
00062 }
00063 catch (ArgumentException_t) {
00064
00065 clear( );
00066 throw;
00067 }
00068 }
00069
00070
00071
00072 void Universal_t::writeMessage (Message_t & msg) const
00073 {
00074 msg . clear( );
00075
00076 try {
00077 ostringstream ss;
00078
00079 msg . setMessageCode (Universal_t::NCODE);
00080
00081 if ( iid_m != NULL_ID )
00082 {
00083 ss << iid_m;
00084 msg . setField (F_IID, ss . str( ));
00085 ss . str (NULL_STRING);
00086 }
00087
00088 if ( !eid_m . empty( ) )
00089 msg . setField (F_EID, eid_m);
00090
00091 if ( status_m != NULL_STATUS )
00092 {
00093 ss << status_m;
00094 msg . setField (F_STATUS, ss . str( ));
00095 ss . str (NULL_STRING);
00096 }
00097
00098 if ( !comment_m . empty( ) )
00099 msg . setField (F_COMMENT, comment_m);
00100
00101 if ( isFlagA( ) || isFlagB( ) )
00102 {
00103 ss << isFlagA( ) << isFlagB( );
00104 msg . setField (F_FLAG, ss . str( ));
00105 ss . str (NULL_STRING);
00106 }
00107 }
00108 catch (ArgumentException_t) {
00109
00110 msg . clear( );
00111 throw;
00112 }
00113 }