+ }
+
+ // Process the data from DESCRIPTION.
+
+ dataReceived = ProcessTextVectors(&eventAlarmName[seekCount], &eventAlarmData[seekCount], false, "DESCRIPTION");
+
+ if (dataReceived.begin() != dataReceived.end() &&
+ (newAlarmData.alarmType == CALENDARALARM_DISPLAY ||
+ newAlarmData.alarmType == CALENDARALARM_EMAIL)){
+
+ bool tokenData = false;
+ string propertyTokens;
+
+ propertyNameData = (string*)&dataReceived.begin()->first;
+
+ propertyData = SplitValues(*propertyNameData);
+
+ for(map<string,string>::iterator iter = propertyData.begin();
+ iter != propertyData.end(); iter++){
+
+ if (iter->first == "ALTREP"){
+
+ newAlarmData.descriptionAltRep = iter->second;
+
+ } else if (iter->first == "LANGUAGE"){
+
+ newAlarmData.descriptionLanguage = iter->second;
+
+ } else {
+
+ if (tokenData == false){
+ tokenData = true;
+ } else {
+ propertyTokens += ";";
+ }
+
+ propertyTokens += iter->first;
+ propertyTokens += "=";
+ propertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (propertyTokens.size() > 0){
+ newAlarmData.descriptionTokens = propertyTokens;
+ }
+
+ newAlarmData.descriptionData = dataReceived.begin()->second;
+ alarmDescriptionFound = true;
+
+ }
+
+ // Process data from SUMMARY.
+
+ dataReceived = ProcessTextVectors(&eventAlarmName[seekCount], &eventAlarmData[seekCount], false, "SUMMARY");
+
+ if (dataReceived.begin() != dataReceived.end() &&
+ newAlarmData.alarmType == CALENDARALARM_EMAIL){
+
+ bool tokenData = false;
+ string propertyTokens;
+
+ propertyNameData = (string*)&dataReceived.begin()->first;
+
+ propertyData = SplitValues(*propertyNameData);
+
+ for(map<string,string>::iterator iter = propertyData.begin();
+ iter != propertyData.end(); iter++){
+
+ if (iter->first == "ALTREP"){
+
+ newAlarmData.summaryAltRep = iter->second;
+
+ } else if (iter->first == "LANGUAGE"){
+
+ newAlarmData.summaryLanguage = iter->second;
+
+ } else {
+
+ if (tokenData == false){
+ tokenData = true;
+ } else {
+ propertyTokens += ";";
+ }
+
+ propertyTokens += iter->first;
+ propertyTokens += "=";
+ propertyTokens += iter->second;
+
+ }
+
+ }
+
+ if (propertyTokens.size() > 0){
+ newAlarmData.summaryTokens = propertyTokens;
+ }
+
+ newAlarmData.summaryData = dataReceived.begin()->second;
+ alarmSummaryFound = true;
+
+ }
+
+ // Process data from DURATION.
+
+ dataReceived = ProcessTextVectors(&eventAlarmName[seekCount], &eventAlarmData[seekCount], false, "DURATION");
+
+ if (dataReceived.begin() != dataReceived.end()){
+
+ try {
+ newAlarmData.durationTokens = dataReceived.begin()->first.substr(9);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ newAlarmData.durationData = dataReceived.begin()->second;
+ alarmDurationFound = true;
+
+ }
+
+ // Process data from REPEAT.
+
+ dataReceived = ProcessTextVectors(&eventAlarmName[seekCount], &eventAlarmData[seekCount], false, "REPEAT");
+
+ if (dataReceived.begin() != dataReceived.end() && alarmDurationFound == true){
+
+ try {
+ newAlarmData.repeatTokens = dataReceived.begin()->first.substr(7);
+ }
+
+ catch(const out_of_range &oor){
+ // Do nothing as there is no data.
+ }
+
+ newAlarmData.repeatData = dataReceived.begin()->second;
+
+ } else {
+
+ newAlarmData.durationData.clear();
+ newAlarmData.durationTokens.clear();
+
+ }
+
+ // Process data from ATTENDEE.
+
+ dataReceived = ProcessTextVectors(&eventAlarmName[seekCount], &eventAlarmData[seekCount], true, "ATTENDEE");
+
+ objectSeekCount = 0;
+
+ for(multimap<string,string>::iterator iter = dataReceived.begin();
+ iter != dataReceived.end();
+ ++iter){
+
+ newAlarmData.attendeeListMember.push_back("");
+ newAlarmData.attendeeListDelegatedFrom.push_back("");
+ newAlarmData.attendeeListDelegatedTo.push_back("");
+ newAlarmData.attendeeListRole.push_back("");
+ newAlarmData.attendeeListRSVP.push_back("");
+ newAlarmData.attendeeListDirectoryEntry.push_back("");
+ newAlarmData.attendeeListSentBy.push_back("");
+ newAlarmData.attendeeListCommonName.push_back("");
+ newAlarmData.attendeeListCalendarUserType.push_back("");
+ newAlarmData.attendeeListParticipationStatus.push_back("");
+ newAlarmData.attendeeListLanguage.push_back("");
+ newAlarmData.attendeeListTokens.push_back("");
+ newAlarmData.attendeeList.push_back("");
+
+ bool tokenData = false;
+ string propertyTokens;
+
+ propertyNameData = (string*)&iter->first;
+
+ propertyData = SplitValues(*propertyNameData);
+
+ for(map<string,string>::iterator dataiter = propertyData.begin();
+ dataiter != propertyData.end(); dataiter++){
+
+ if (dataiter->first == "CUTYPE"){
+
+ newAlarmData.attendeeListCalendarUserType[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "MEMBER"){
+
+ newAlarmData.attendeeListMember[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "ROLE"){
+
+ newAlarmData.attendeeListRole[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "PARTSTAT"){
+
+ newAlarmData.attendeeListParticipationStatus[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "RSVP"){
+
+ newAlarmData.attendeeListRSVP[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "DELEGATED-TO"){
+
+ newAlarmData.attendeeListDelegatedTo[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "DELEGATED-FROM"){
+
+ newAlarmData.attendeeListDelegatedFrom[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "SENT-BY"){
+
+ newAlarmData.attendeeListSentBy[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "CN"){
+
+ newAlarmData.attendeeListCommonName[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "DIR"){
+
+ newAlarmData.attendeeListDirectoryEntry[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "LANGUAGE"){
+
+ newAlarmData.attendeeListLanguage[objectSeekCount] = dataiter->second;
+
+ } else {
+
+ if (tokenData == false){
+ tokenData = true;
+ } else {
+ propertyTokens += ";";
+ }
+
+ propertyTokens += dataiter->first;
+ propertyTokens += "=";
+ propertyTokens += dataiter->second;
+
+ }
+
+ }
+
+ if (propertyTokens.size() > 0){
+ newAlarmData.attendeeListTokens[objectSeekCount] = propertyTokens;
+ }
+
+ newAlarmData.attendeeList[objectSeekCount] = iter->second;
+
+ objectSeekCount++;
+
+ }
+
+ // Process data from ATTACH.
+
+ dataReceived = ProcessTextVectors(&eventAlarmName[seekCount], &eventAlarmData[seekCount], true, "ATTACH");
+
+ objectSeekCount = 0;
+
+ for(multimap<string,string>::iterator iter = dataReceived.begin();
+ iter != dataReceived.end();
+ ++iter){
+
+ newAlarmData.attachListEncoding.push_back("");
+ newAlarmData.attachListValue.push_back("");
+ newAlarmData.attachListFormatType.push_back("");
+ newAlarmData.attachListTokens.push_back("");
+ newAlarmData.attachList.push_back("");
+
+ bool tokenData = false;
+ string propertyTokens;
+
+ propertyNameData = (string*)&iter->first;
+
+ propertyData = SplitValues(*propertyNameData);
+
+ for(map<string,string>::iterator dataiter = propertyData.begin();
+ dataiter != propertyData.end(); dataiter++){
+
+ if (dataiter->first == "ENCODING"){
+
+ newAlarmData.attachListEncoding[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "VALUE"){
+
+ newAlarmData.attachListValue[objectSeekCount] = dataiter->second;
+
+ } else if (dataiter->first == "FMTTYPE"){
+
+ newAlarmData.attachListFormatType[objectSeekCount] = dataiter->second;
+
+ } else {
+
+ if (tokenData == false){
+ tokenData = true;
+ } else {
+ propertyTokens += ";";
+ }
+
+ propertyTokens += dataiter->first;
+ propertyTokens += "=";
+ propertyTokens += dataiter->second;
+
+ }
+
+ }
+
+ if (propertyTokens.size() > 0){
+ newAlarmData.attachListTokens[objectSeekCount] = propertyTokens;
+ }
+
+ newAlarmData.attachList[objectSeekCount] = iter->second;
+
+ objectSeekCount++;
+
+ }
+
+ // Process data from X-*
+
+ alarmObjectCount = 0;
+
+ for(vector<string>::iterator xtokeniter = eventAlarmName[seekCount].begin();
+ xtokeniter != eventAlarmName[seekCount].end(); ++xtokeniter){
+
+ bool tokenData = false;
+ string propertyTokens;
+
+ if (xtokeniter->substr(0,2) == "X-" &&
+ xtokeniter->size() > 2){
+
+ newAlarmData.xTokensData.push_back(eventAlarmData[seekCount][alarmObjectCount]);
+ newAlarmData.xTokensDataTokens.push_back(eventAlarmName[seekCount][alarmObjectCount]);
+
+ }
+
+ alarmObjectCount++;
+
+ }
+
+ if (newAlarmData.alarmType == CALENDARALARM_AUDIO &&
+ alarmActionFound == true &&
+ alarmTriggerFound == true){
+
+ calendarAlarmData.push_back(newAlarmData);
+
+ } else if (newAlarmData.alarmType == CALENDARALARM_DISPLAY &&
+ alarmActionFound == true &&
+ alarmTriggerFound == true &&
+ alarmDescriptionFound == true){
+
+ calendarAlarmData.push_back(newAlarmData);
+
+ } else if (newAlarmData.alarmType == CALENDARALARM_EMAIL &&
+ alarmActionFound == true &&
+ alarmTriggerFound == true &&
+ alarmDescriptionFound == true &&
+ alarmSummaryFound == true){
+
+ calendarAlarmData.push_back(newAlarmData);
+
+ }
+
+ seekCount++;
+
+ }
+
+ objectSeekCount = 0;
+
+ // Process data from X-*
+
+ for(vector<string>::iterator iter = objectName.begin();
+ iter != objectName.end(); ++iter){