Changeset 30678ae
- Timestamp:
- Jan 29, 2007, 9:54:41 PM (16 years ago)
- Branches:
- master, barnowl_perlaim, debian, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
- Children:
- 29ebcea
- Parents:
- a8a3433
- git-author:
- Nelson Elhage <nelhage@mit.edu> (01/29/07 21:54:30)
- git-committer:
- Nelson Elhage <nelhage@mit.edu> (01/29/07 21:54:41)
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
message.c
r8fa9562 r30678ae 16 16 { 17 17 m->id=owl_global_get_nextmsgid(&g); 18 m->type=OWL_MESSAGE_TYPE_GENERIC;19 18 owl_message_set_direction_none(m); 20 19 m->delete=0; … … 324 323 void owl_message_set_type_admin(owl_message *m) 325 324 { 326 m->type=OWL_MESSAGE_TYPE_ADMIN;325 owl_message_set_attribute(m, "type", "admin"); 327 326 } 328 327 329 328 void owl_message_set_type_loopback(owl_message *m) 330 329 { 331 m->type=OWL_MESSAGE_TYPE_LOOPBACK;330 owl_message_set_attribute(m, "type", "loopback"); 332 331 } 333 332 334 333 void owl_message_set_type_zephyr(owl_message *m) 335 334 { 336 m->type=OWL_MESSAGE_TYPE_ZEPHYR;335 owl_message_set_attribute(m, "type", "zephyr"); 337 336 } 338 337 339 338 void owl_message_set_type_aim(owl_message *m) 340 339 { 341 m->type=OWL_MESSAGE_TYPE_AIM; 342 } 343 344 void owl_message_set_type(owl_message *m, int type) 345 { 346 m->type=type; 340 owl_message_set_attribute(m, "type", "aim"); 341 } 342 343 void owl_message_set_type(owl_message *m, char* type) 344 { 345 owl_message_set_attribute(m, "type", type); 346 } 347 348 int owl_message_is_type(owl_message *m, char *type) { 349 char * t = owl_message_get_attribute_value(m, "type"); 350 if(!t) return 0; 351 return !strcmp(t, type); 347 352 } 348 353 349 354 int owl_message_is_type_admin(owl_message *m) 350 355 { 351 if (m->type==OWL_MESSAGE_TYPE_ADMIN) return(1); 352 return(0); 356 return owl_message_is_type(m, "admin"); 353 357 } 354 358 355 359 int owl_message_is_type_generic(owl_message *m) 356 360 { 357 if (m->type==OWL_MESSAGE_TYPE_GENERIC) return(1);358 return (0);361 char * t = owl_message_get_attribute_value(m, "type"); 362 return (t == NULL); 359 363 } 360 364 361 365 int owl_message_is_type_zephyr(owl_message *m) 362 366 { 363 if (m->type==OWL_MESSAGE_TYPE_ZEPHYR) return(1); 364 return(0); 367 return owl_message_is_type(m, "zephyr"); 365 368 } 366 369 367 370 int owl_message_is_type_aim(owl_message *m) 368 371 { 369 if (m->type==OWL_MESSAGE_TYPE_AIM) return(1);370 return(0); 371 } 372 372 return owl_message_is_type(m, "aim"); 373 } 374 375 /* XXX TODO: deprecate this */ 373 376 int owl_message_is_type_jabber(owl_message *m) 374 377 { 375 if (m->type==OWL_MESSAGE_TYPE_JABBER) return(1); 376 377 return(0); 378 } 379 380 int owl_message_is_type_icq(owl_message *m) 381 { 382 if (m->type==OWL_MESSAGE_TYPE_ICQ) return(1); 383 384 return(0); 385 } 386 387 int owl_message_is_type_yahoo(owl_message *m) 388 { 389 if (m->type==OWL_MESSAGE_TYPE_YAHOO) return(1); 390 391 return(0); 392 } 393 394 int owl_message_is_type_msn(owl_message *m) 395 { 396 if (m->type==OWL_MESSAGE_TYPE_MSN) return(1); 397 398 return(0); 378 return owl_message_is_type(m, "jabber"); 399 379 } 400 380 401 381 int owl_message_is_type_loopback(owl_message *m) 402 382 { 403 if (m->type==OWL_MESSAGE_TYPE_LOOPBACK) return(1); 404 return(0); 383 return owl_message_is_type(m, "loopback"); 405 384 } 406 385 … … 666 645 667 646 char *owl_message_get_type(owl_message *m) { 668 switch (m->type) { 669 case OWL_MESSAGE_TYPE_ADMIN: 670 return("admin"); 671 case OWL_MESSAGE_TYPE_ZEPHYR: 672 return("zephyr"); 673 case OWL_MESSAGE_TYPE_GENERIC: 674 return("generic"); 675 case OWL_MESSAGE_TYPE_AIM: 676 return("aim"); 677 case OWL_MESSAGE_TYPE_JABBER: 678 return("jabber"); 679 case OWL_MESSAGE_TYPE_ICQ: 680 return("icq"); 681 case OWL_MESSAGE_TYPE_YAHOO: 682 return("yahoo"); 683 case OWL_MESSAGE_TYPE_MSN: 684 return("msn"); 685 case OWL_MESSAGE_TYPE_LOOPBACK: 686 return("loopback"); 687 default: 688 return("unknown"); 689 } 690 } 691 692 int owl_message_parse_type(char *type) { 693 if(!strcmp(type, "admin")) { 694 return OWL_MESSAGE_TYPE_ADMIN; 695 } else if(!strcmp(type, "zephyr")) { 696 return OWL_MESSAGE_TYPE_ZEPHYR; 697 } if(!strcmp(type, "aim")) { 698 return OWL_MESSAGE_TYPE_AIM; 699 } else if(!strcmp(type, "jabber")) { 700 return OWL_MESSAGE_TYPE_JABBER; 701 } else if(!strcmp(type, "icq")) { 702 return OWL_MESSAGE_TYPE_ICQ; 703 } else if(!strcmp(type, "yahoo")) { 704 return OWL_MESSAGE_TYPE_YAHOO; 705 } else if(!strcmp(type, "msn")) { 706 return OWL_MESSAGE_TYPE_MSN; 707 } else if(!strcmp(type, "loopback")) { 708 return OWL_MESSAGE_TYPE_LOOPBACK; 709 } else { 710 return OWL_MESSAGE_TYPE_GENERIC; 711 } 647 char * type = owl_message_get_attribute_value(m, "type"); 648 if(!type) { 649 return "generic"; 650 } 651 return type; 712 652 } 713 653 -
owl.h
r99c7549 r30678ae 109 109 #define OWL_PROTOCOL_MSN 5 110 110 111 #define OWL_MESSAGE_TYPE_ADMIN 0112 #define OWL_MESSAGE_TYPE_GENERIC 1113 #define OWL_MESSAGE_TYPE_ZEPHYR 2114 #define OWL_MESSAGE_TYPE_AIM 3115 #define OWL_MESSAGE_TYPE_JABBER 4116 #define OWL_MESSAGE_TYPE_ICQ 5117 #define OWL_MESSAGE_TYPE_YAHOO 6118 #define OWL_MESSAGE_TYPE_MSN 7119 #define OWL_MESSAGE_TYPE_LOOPBACK 8120 121 111 #define OWL_MESSAGE_DIRECTION_NONE 0 122 112 #define OWL_MESSAGE_DIRECTION_IN 1 … … 334 324 typedef struct _owl_message { 335 325 int id; 336 int type;337 326 int direction; 338 327 #ifdef HAVE_LIBZEPHYR -
perlconfig.c
r8203afd r30678ae 26 26 } 27 27 28 SV *owl_perlconfig_message2hashref(owl_message *m) /*noproto*/28 SV *owl_perlconfig_message2hashref(owl_message *m) 29 29 { 30 30 HV *h; 31 31 SV *hr; 32 char *ptr, *blessas ;32 char *ptr, *blessas, *type; 33 33 int i, j; 34 34 owl_pair *pair; … … 86 86 hv_store(h, "private", strlen("private"), newSViv(owl_message_is_private(m)),0); 87 87 88 if (owl_message_is_type_zephyr(m)) blessas = "BarnOwl::Message::Zephyr"; 89 else if (owl_message_is_type_aim(m)) blessas = "BarnOwl::Message::AIM"; 90 else if (owl_message_is_type_jabber(m)) blessas = "BarnOwl::Message::Jabber"; 91 else if (owl_message_is_type_admin(m)) blessas = "BarnOwl::Message::Admin"; 92 else if (owl_message_is_type_generic(m)) blessas = "BarnOwl::Message::Generic"; 93 else blessas = "BarnOwl::Message"; 88 type = owl_message_get_type(m); 89 if(!type) type = "generic"; 90 type = owl_strdup(type); 91 type[0] = toupper(type[0]); 92 blessas = owl_sprintf("BarnOwl::Message::%s", type); 94 93 95 94 hr = sv_2mortal(newRV_noinc((SV*)h)); 96 return sv_bless(hr, gv_stashpv(blessas,0)); 97 } 98 95 hr = sv_bless(hr, gv_stashpv(blessas,0)); 96 owl_free(type); 97 owl_free(blessas); 98 return hr; 99 } 99 100 100 101 SV *owl_perlconfig_curmessage2hashref(void) /*noproto*/ … … 110 111 } 111 112 113 /* XXX TODO: Messages should round-trip properly between 114 message2hashref and hashref2message. Currently we lose 115 zephyr-specific properties stored in the ZNotice_t 116 */ 117 owl_message * owl_perlconfig_hashref2message(SV *msg) 118 { 119 owl_message * m; 120 HE * ent; 121 I32 count, len; 122 char *key,*val; 123 HV * hash; 124 125 hash = (HV*)SvRV(msg); 126 127 m = owl_malloc(sizeof(owl_message)); 128 owl_message_init(m); 129 130 count = hv_iterinit(hash); 131 while((ent = hv_iternext(hash))) { 132 key = hv_iterkey(ent, &len); 133 val = SvPV_nolen(hv_iterval(hash, ent)); 134 if(!strcmp(key, "type")) { 135 owl_message_set_type(m, val); 136 } else if(!strcmp(key, "direction")) { 137 owl_message_set_direction(m, owl_message_parse_direction(val)); 138 } else if(!strcmp(key, "private")) { 139 SV * v = hv_iterval(hash, ent); 140 if(SvTRUE(v)) { 141 owl_message_set_isprivate(m); 142 } 143 } else if (!strcmp(key, "hostname")) { 144 owl_message_set_hostname(m, val); 145 } else if (!strcmp(key, "zwriteline")) { 146 owl_message_set_zwriteline(m, val); 147 } else if (!strcmp(key, "time")) { 148 m->timestr = owl_strdup(val); 149 struct tm tm; 150 strptime(val, "%a %b %d %T %Y", &tm); 151 m->time = mktime(&tm); 152 } else { 153 owl_message_set_attribute(m, key, val); 154 } 155 } 156 if(owl_message_is_type_admin(m)) { 157 if(!owl_message_get_attribute_value(m, "adminheader")) 158 owl_message_set_attribute(m, "adminheader", ""); 159 } 160 return m; 161 } 112 162 113 163 /* Calls in a scalar context, passing it a hash reference. -
perlglue.xs
r7f792c1 r30678ae 117 117 SV *msg 118 118 PREINIT: 119 char * key;120 char * val;121 119 owl_message *m; 122 HV * hash;123 HE * ent;124 I32 count;125 I32 len;126 120 CODE: 127 121 { … … 130 124 } 131 125 132 hash = (HV*)SvRV(msg); 133 m = owl_malloc(sizeof(owl_message)); 134 owl_message_init(m); 135 136 count = hv_iterinit(hash); 137 while((ent = hv_iternext(hash))) { 138 key = hv_iterkey(ent, &len); 139 val = SvPV_nolen(hv_iterval(hash, ent)); 140 if(!strcmp(key, "type")) { 141 owl_message_set_type(m, owl_message_parse_type(val)); 142 } else if(!strcmp(key, "direction")) { 143 owl_message_set_direction(m, owl_message_parse_direction(val)); 144 } else if(!strcmp(key, "private")) { 145 SV * v = hv_iterval(hash, ent); 146 if(SvTRUE(v)) { 147 owl_message_set_isprivate(m); 148 } 149 } else if (!strcmp(key, "hostname")) { 150 owl_message_set_hostname(m, val); 151 } else if (!strcmp(key, "zwriteline")) { 152 owl_message_set_zwriteline(m, val); 153 } else if (!strcmp(key, "time")) { 154 m->timestr = owl_strdup(val); 155 struct tm tm; 156 strptime(val, "%a %b %d %T %Y", &tm); 157 m->time = mktime(&tm); 158 } else { 159 owl_message_set_attribute(m, key, val); 160 } 161 } 162 if(owl_message_is_type_admin(m)) { 163 if(!owl_message_get_attribute_value(m, "adminheader")) 164 owl_message_set_attribute(m, "adminheader", ""); 165 } 126 m = owl_perlconfig_hashref2message(msg); 166 127 167 128 owl_global_messagequeue_addmsg(&g, m);
Note: See TracChangeset
for help on using the changeset viewer.