00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00028 #ifndef _COMMON_H__
00029 #define _COMMON_H__
00030
00031 #include <vector>
00032 #include <algorithm>
00033 #include <list>
00034 #include <string>
00035 #include <iostream>
00036 #include <sqlite3.h>
00037 #include <assert.h>
00038 #include "CCache.h"
00039 #include "CMulticalendar.h"
00040 #include "DbCalls.h"
00041 #include "CCalendar.h"
00042 #include "CCalendarDB.h"
00043 #include "CComponent.h"
00044 #include "CComponentDetails.h"
00045 #include "CEvent.h"
00046 #include "CTodo.h"
00047 #include "CJournal.h"
00048 #include "CRecurrence.h"
00049 #include "CalendarLog.h"
00050 #include "CParameters.h"
00051 #include "CAttendee.h"
00052 #include "CProperties.h"
00053 #include "COrganizer.h"
00054 #include "CAlarm.h"
00055 #include <clockd/libtime.h>
00056 using namespace std;
00057 using std::vector;
00058 using std::string;
00059
00060 #include <string.h>
00061 #include <unistd.h>
00062
00065
00066 const char DEFAULT_CALENDAR[] = "Private";
00067 const char SYNCHRONIZED_CALENDAR[] = "Synchronized";
00068 const char OPAQUE[] = "OPAQUE";
00069 const char TRANSPERANCY[] = "TRANSPARENT";
00070 const char BEGIN[] = "begin";
00071 const char END[] = "end";
00072 const char MAXID[] = "MaxId";
00073 const char CALAPP[] = "CALENDAR-UI";
00074 const char NULL_STRING[] = "NULL";
00077 const char BEGIN_EVENT[] = "BEGIN:VEVENT";
00078 const char END_EVENT[] = "END:VEVENT";
00079 const char BEGIN_TODO[] = "BEGIN:VTODO";
00080 const char END_TODO[] = "END:VTODO";
00081 const char BEGIN_JOURNAL[] = "BEGIN:VJOURNAL";
00082 const char END_JOURNAL[] = "END:VJOURNAL";
00083 const char BEGIN_CALENDAR[] = "BEGIN:VCALENDAR";
00084 const char END_CALENDAR[] = "END:VCALENDAR";
00085 const char BEGIN_ALARM[] = "BEGIN:VALARM";
00086 const char END_ALARM[] = "END:VALARM";
00087 const char BEGIN_TIMEZONE[] = "BEGIN:VTIMEZONE";
00088 const char END_TIMEZONE[] = "END:VTIMEZONE";
00089 const char ICS_DEFAULT_CALENDAR_NAME[] = "imported calendar-%";
00090 const char ICS_CALNAME_SEPERATOR[] = "-";
00091 const char ICS_FILENAME_SEPERATOR[] = "file://";
00092 const char V_EVENT[] = "VEVENT";
00093 const char V_TODO[] = "VTODO";
00094 const char VJOURNAL[] = "VJOURNAL";
00095 const char RDATE[] = "RDATE";
00096 const char EXDATE[] = "EXDATE";
00097 const char RDATE_COL[] = "RDATE:";
00098 const char EXDATE_COL[] = "EXDATE:";
00099 const char RRULE[] = "RRULE";
00100 const char EXRULE[] = "EXRULE";
00101 const char RRULE_COL[] = "RRULE:";
00102 const char EXRULE_COL[] = "EXRULE:";
00103 const char A_ALARM[] = "AALARM";
00104 const char AALARM_COL[] = "AALARM:";
00105 const char DAILY[] = "DAILY";
00106 const char WEEKLY[] = "WEEKLY";
00107 const char MONTHLY[] = "MONTHLY";
00108 const char YEARLY[] = "YEARLY";
00109 const char WEEKDAY[] = "BYDAY=MO,TU,WE,TH,FR";
00110 const char UNTIL_ICAL[] = "UNTIL=";
00111 const char PUBLIC[] = "PUBLIC";
00112 const char PRIVATE[] = "PRIVATE";
00113 const char CONFIDENTIAL[] = "CONFIDENTIAL";
00114 const char ALTREP[] = "ALTREP=";
00115 const char DOUBLE_QUOTE[] = "\"";
00116 const char T_ICAL[] ="T";
00117 const char DAY_ICAL[] = "235959";
00118 const char SIX_O[] ="T000000";
00119 const char SIX_T_SIX[] = "000000T000000";
00120 const char WHITE_SPACE[] = " ";
00121 const char FW_SLASH[] = "/";
00124 const char DCREATED[] = "DCREATED:";
00125 const char RSVP_YES[] = "RSVP=YES";
00126 const char RSVP_NO[] = "RSVP=NO";
00127 const char PARTSTAT_SENT[] = "STATUS=SENT";
00128 const char PARTSTAT_CONFIRMED[] = "STATUS=CONFIRMED";
00129 const char STATUS_SENT[] = "STATUS:SENT";
00130 const char STATUS_DECLINED[] = "STATUS:DECLINED";
00131 const char STATUS_DELEGATED[] = "STATUS:DELEGATED";
00132 const char STATUS_ACCEPTED[] = "STATUS:ACCEPTED";
00133 const char STATUS_NEEDS_ACTION[] = "STATUS:NEEDS-ACTION";
00134 const char STATUS_CONFIRMED[] = "STATUS:CONFIRMED";
00135 const char STATUS_TENTATIVE[] = "STATUS:TENTATIVE";
00136 const char STATUS_COMPLETED[] = "STATUS:COMPLETED";
00137 const char ROLE_ATTENDEE[] = "ROLE=ATTENDEE";
00138 const char ROLE_ORGANIZER[] = "ROLE=ORGANIZER";
00139 const char ROLE_OWNER[] = "ROLE=OWNER";
00140 const char ROLE_DELEGATE[] = "ROLE=DELEGATE";
00141 const char EXPECT[] = "EXPECT=";
00142 const char TRANSP_ZERO[] = "TRANSP:0";
00143 const char TRANSP_ONE[] = "TRANSP:1";
00144 const char TRANSP_GT_ONE[] = "TRANSP:>1";
00145 const char MON_DAY[] = "MO";
00146 const char TUES_DAY[] = "TU";
00147 const char WEDNES_DAY[] = "WE";
00148 const char THURS_DAY[] = "TH";
00149 const char FRI_DAY[] = "FR";
00150 const char SATUR_DAY[] = "SA";
00151 const char COMMA[] = ",";
00152 const char HYPHEN[] = "-";
00153 const char PLUS[] = "+";
00154 const char HASH[] = "#";
00155 const char SUN_DAY[] = "SU";
00156 const char COUNT_VCAL[] = ";COUNT=";
00157 const char UNTIL_VCAL[] = ";UNTIL=";
00158 const char FREQ_DAILY[] = "FREQ=DAILY";
00159 const char FREQ_WEEKLY[] = "FREQ=WEEKLY";
00160 const char FREQ_MONTHLY[] = "FREQ=MONTHLY";
00161 const char FREQ_YEARLY[] = "FREQ=YEARLY";
00162 const char INTERVAL_VCAL[] = ";INTERVAL=";
00163 const char BY_MONTH_VCAL[] = ";BYMONTH=";
00164 const char BY_MONTHDAY_VCAL[] = ";BYMONTHDAY=";
00165 const char BY_DAY_VCAL[] = ";BYDAY=";
00166 const char WKSTRT_SU_VCAL[] = ";WKST=SU";
00167 const char UNTIL[] = "UNTIL";
00168 const char COUNT[] = "COUNT";
00169 const char FREQUENCY[] = "FREQ";
00170 const char INTERVAL[] = "INTERVAL";
00171 const char BY_DAY[] = "BYDAY";
00172 const char BY_MONTHDAY[] = "BYMONTHDAY";
00173 const char BY_MONTH[] = "BYMONTH";
00174 const char TZID[] = "TZID";
00175 const char PERIOD[] = "PERIOD";
00176 const char DATE[] = "DATE";
00177 const char DURATION[] = "DURATION";
00178 const char REPEAT[] = "REPEAT";
00179 const char ACTION_AUDIO[] = "ACTION:AUDIO";
00180 const char DURATION_COL[] = "DURATION:";
00181 const char REPEAT_COL[] = "REPEAT:";
00182 const char DALARM[] = "DALARM";
00183 const char PALARM[] = "PALARM";
00184 const char M[] = "M";
00185 const char P[] = "P";
00186 const char Y[]= "Y";
00187 const char D[] = "D";
00188 const char W[] = "W";
00189 const char NEWLINE[] = "\n";
00190 const char HASH_ZERO[] = "#0";
00191 const char TIMEZONE[] = "T000000Z";
00192 const char TRIGGER_VALUE_DATE_TIME[] = "TRIGGER;VALUE=DATE-TIME:";
00193 const char ALARM_TYPE_WAVE_VALUE[] = "AALARM:";
00194 const char AUDIO_ALARM_DELIMITER[] = ":=;,";
00195 const char DATE_DELIMITER[] = ":=;,/";
00196 const char VCALRULE_DELIMITER[] = ":=;,";
00197 const char ZEROSEMI[] = "0;";
00198 const int ZEROSEC = 0;
00199 const int THREEOOSEC = 300;
00200 const int NINEOOSEC = 900;
00201 const int HALFHOUR = 1800;
00202 const int ONEHOUR = 3600;
00203 const int THREEHOUR = 10800;
00204 const int ONEDAY = 86400;
00205 const int YEARDAYS = 365;
00206 const int MAX_DAYINSEC = 2145830400;
00207 const int HALFDAY = 43200;
00208 const int TENSEVEN = 17;
00209 const int THREE = 3;
00210 const int EIGHT = 8;
00211 const int SIX = 6;
00212 const int MAX_ALARM_TIME = 9;
00213 const int MAX_SUPPORTED_YEAR_IN_SEC = 2145830400;
00214 const int MAX_SUPPORTED_YEAR_IN_YEAR = 2037;
00215 const char ENCODING[] = "ENCODING=";
00216 const int altime[MAX_ALARM_TIME] = { ZEROSEC,
00217 ZEROSEC,
00218 THREEOOSEC,
00219 NINEOOSEC,
00220 HALFHOUR ,
00221 ONEHOUR,
00222 THREEHOUR ,
00223 ONEDAY ,
00224 HALFDAY
00225 };
00226
00229 const int ZERO = 0;
00230 const int ONE = 1;
00231 const int HUNDRED = 100;
00232 const int NINETEEN_HUNDRED = 1900;
00233 const int NINE = 9;
00234 const int MAX_PRIORITY = 255;
00235 const int EXTERNAL_ENTRY = 8;
00236 const int SUCCESS = 1;
00237 const int FAILURE = 0;
00238 const int NULLID = -1;
00239 const int MAX_ENTRIES = 100;
00240 const int MAX_ENTRY_COL = 10;
00241 const int MAX_JOUR_COL = 7;
00242 const int MAX_TODO_COL = 13;
00243 const int MAX_APRIM_COL = 7;
00244 const int MAX_ORZER_COL = 6;
00245 const int MAXSIZE = 32;
00246 const int MACLENGTH = 18;
00247 const int MAX_RECUR = 6;
00248 const int ADDRESSLENGTH = 6;
00249 const int HEX_252 = 0xfc;
00250 const int HEX_3 = 0x03;
00251 const int HEX_240 = 0xf0;
00252 const int HEX_15 = 0x0f;
00253 const int HEX_192 = 0xc0;
00254 const int HEX_63 = 0x3f;
00255 const int CAL_VISIBLE = 1;
00258 const int DEFAULT_ICS_CALNAME_LENGTH = 15;
00259 const int ICS_FILENAME_SEPERATOR_LENGTH = 6;
00260 const int ALARM_DUR_DIFF1 = 600;
00261 const int ALARM_DUR_DIFF2 = 1350;
00262 const int ALARM_DUR_DIFF3 = 2700;
00263 const int ALARM_DUR_DIFF4 = 7200;
00264 const int SEC_IN_HR = 3600;
00265
00268 const char DESCRIPTION[] = "DESCRIPTION";
00269 const char SUMMARY[] = "SUMMARY";
00270 const char RESOURCES[] = "RESOURCES";
00271 const char CATEGORIES[] = "CATEGORIES";
00272 const char ATTDEE[] = "ATTEND";
00273 const char ORGZER[] = "ORGNI";
00274 const char ATTACH[] = "ATTACH";
00275 const char ATTACH_ALARM[] = "ATTACH;FMTTYPE=audio/basic:";
00278 const char RELATEDTO[] = "RELATED-TO";
00279 const char COMMENT[] = "COMMENT";
00280 const char LOCATION[] = "LOCATION";
00281 const char CONTACT[] = "CONTACT";
00282
00283 const char LANGUAGE[] = "LANGUAGE";
00284 const char ALTER[] = "ALTER";
00285 const char RELTYPE[] = "RELTYPE";
00286 const char FMTYPE[] = "FMTYPE";
00287
00288 const char SENT[] = "SENTBY";
00289 const char CNAME[] = "CNAME";
00290 const char DIRPAR[] = "DIRPARAM";
00291 const char GNMAILTO[] = "MAILTO";
00292 const char ATCUTYPE[] = "CUTYPE";
00293 const char ATMEMBER[] = "MEMBER";
00294 const char ATROLE[] = "ROLE";
00295 const char ATPSTAT[] = "PSTAT";
00296 const char ATRSVP[] = "RSVP";
00297 const char ATDELEGATEES[] = "DELEGATEES";
00298 const char ATDELEGATOR[] = "DELEGATOR";
00299 const int ATTDEE_LEN = 6;
00300 const int ORGZER_LEN = 5;
00301 const int TWO_ROWS = 2;
00305 const char COMMIT[] = "commit";
00306 const char ROLLBACK[] = "rollback";
00307 const int DEFAULT_SIZE = 50;
00312 #define ASSERTION(X) assert(X);
00313
00318 typedef enum {
00319 CNPARAM = 0,
00320 DIRPARAM,
00321 SENTBYPARAM,
00322 ORGLANGUAGE
00323 }OrganizerParams;
00324
00325 typedef enum {
00326 CALENDAR_USER_TYPE = 0,
00327 MEMBER ,
00328 ROLE,
00329 PART_STATUS,
00330 RSVP,
00331 DELEGATEES,
00332 DELEGATOR,
00333 SENTBY,
00334 COMMON_NAME,
00335 DIR_PARAM,
00336 ATTLANGUAGE,
00337 MAILTO
00338 } AttendeeParams;
00339
00340 enum DATATYPE{
00341 STRING = 0,
00342 INTEGER,
00343 FLOAT,
00344 BOOL,
00345 NONE_TYPE
00346 };
00347
00348 enum EntryType{
00349 ALL_ENTRIES = 0,
00350 EVENT,
00351 TODO,
00352 JOURNAL,
00353 BIRTHDAY
00354 };
00355
00356 enum OPTION_TYPE {
00357
00358 HAS_ATTENDEE = 1,
00359 HAS_ORGANIZER,
00360 HAS_RECURRENCE,
00361 HAS_ALARM,
00362 HAS_RECURRENCE_ALARM,
00363 HAS_PARTICIPANT,
00364 HAS_CATEGORIES,
00365 HAS_COMMENT,
00366 HAS_EXTRA
00367 };
00368
00369 enum RecurrencType{
00370 E_NONE =0 ,
00371 E_DAILY,
00372 E_WEEKDAY,
00373 E_WEEKLY,
00374 E_MONTHLY,
00375 E_YEARLY,
00376 E_COMPLEX
00377 };
00378
00379 enum entryType {
00380 E_CALENDAR = 0,
00381 E_EVENT,
00382 E_TODO,
00383 E_JOURNAL,
00384 E_BDAY,
00385 E_SPARE,
00386 E_VTIMEZONE
00387 };
00388
00389 enum columnId {
00390 DB_COLUMN_ID1 = 0,
00391 DB_COLUMN_ID2,
00392 DB_COLUMN_ID3,
00393 DB_COLUMN_ID4,
00394 DB_COLUMN_ID5,
00395 DB_COLUMN_ID6,
00396 DB_COLUMN_ID7,
00397 DB_COLUMN_ID8,
00398 DB_COLUMN_ID9,
00399 DB_COLUMN_ID10,
00400 DB_COLUMN_ID11,
00401 DB_COLUMN_ID12,
00402 DB_COLUMN_ID13,
00403 DB_COLUMN_ID14,
00404 DB_COLUMN_ID15,
00405 DB_COLUMN_ID16,
00406 DB_COLUMN_ID17,
00407 DB_COLUMN_ID18,
00408 DB_COLUMN_ID19,
00409 DB_COLUMN_ID20,
00410 DB_COLUMN_ID21,
00411 DB_COLUMN_ID22,
00412 DB_COLUMN_ID23,
00413 DB_COLUMN_ID24,
00414 DB_COLUMN_ID25,
00415 DB_COLUMN_ID26,
00416 DB_COLUMN_ID27,
00417 DB_COLUMN_ID28,
00418 DB_COLUMN_ID29,
00419 DB_COLUMN_ID30,
00420 DB_COLUMN_ID31,
00421 DB_COLUMN_ID32,
00422 DB_COLUMN_ID33,
00423 DB_COLUMN_ID34,
00424 DB_COLUMN_ID35,
00425 DB_COLUMN_ID36,
00426 DB_COLUMN_ID37,
00427 DB_COLUMN_ID38,
00428 DB_COLUMN_ID39,
00429 DB_COLUMN_ID40,
00430 DB_COLUMN_ID41,
00431 DB_COLUMN_ID42,
00432 DB_COLUMN_ID43,
00433 DB_COLUMN_ID44,
00434 DB_COLUMN_ID45,
00435 DB_COLUMN_ID46,
00436 DB_COLUMN_ID47,
00437 DB_COLUMN_ID48,
00438 DB_COLUMN_ID49
00439 };
00440
00441 enum DaysOfWeek
00442 {
00443 Sunday = 1,
00444 Monday = 2,
00445 Tuesday = 4,
00446 Wednesday = 8,
00447 Thursday = 16,
00448 Friday = 32,
00449 Saturday = 64
00450 };
00451
00452 enum RecurrenceType
00453 {
00454 RecursSecondly = 0,
00455 RecursMinutely ,
00456 RecursHourly ,
00457 RecursDaily ,
00458 RecursWeekly ,
00459 RecursMonthly ,
00460 RecursMonthNth ,
00461 RecursYearly ,
00462 RecursYearNth
00463 };
00464
00465 typedef struct {
00466 RecurrenceType freq;
00467 char* interval;
00468 char* modifier;
00469 char* duration;
00470 }RecurrenceItem;
00471
00472 enum queryId {
00473 DB_QUERY_INDEX1 = 1,
00474 DB_QUERY_INDEX2,
00475 DB_QUERY_INDEX3,
00476 DB_QUERY_INDEX4,
00477 DB_QUERY_INDEX5,
00478 DB_QUERY_INDEX6,
00479 DB_QUERY_INDEX7,
00480 DB_QUERY_INDEX8
00481 };
00482
00483 #endif