*** sm/mod_announce.c.orig Mon May 31 23:31:05 2004 --- sm/mod_announce.c Fri Sep 17 09:47:39 2004 *************** *** 45,53 **** os_t os; os_object_t o; os_type_t ot; int ns, elem, attr; char timestamp[18], telem[5]; ! struct tm tm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; data->loaded = 1; --- 45,57 ---- os_t os; os_object_t o; os_type_t ot; + nad_t nad; int ns, elem, attr; char timestamp[18], telem[5]; ! struct tm tm; ! ! /* struct tm can vary in size depending on platform */ ! memset(&tm, 0, sizeof(struct tm)); data->loaded = 1; *************** *** 55,61 **** if((ret = storage_get(mod->mm->sm->st, "motd-message", mod->mm->sm->id, NULL, &os)) == st_SUCCESS) { os_iter_first(os); o = os_iter_object(os); ! if(os_object_get(o, "xml", (void **) &data->nad, &ot)) { if((ns = nad_find_scoped_namespace(data->nad, uri_DELAY, NULL)) >= 0 && (elem = nad_find_elem(data->nad, 1, ns, "x", 1)) >= 0 && (attr = nad_find_attr(data->nad, elem, -1, "stamp", NULL)) >= 0) { --- 59,67 ---- if((ret = storage_get(mod->mm->sm->st, "motd-message", mod->mm->sm->id, NULL, &os)) == st_SUCCESS) { os_iter_first(os); o = os_iter_object(os); ! if(os_object_get(o, "xml", (void **) &nad, &ot)) { ! /* Copy the nad, as the original is freed when the os is freed below */ ! data->nad = nad_copy(nad); if((ns = nad_find_scoped_namespace(data->nad, uri_DELAY, NULL)) >= 0 && (elem = nad_find_elem(data->nad, 1, ns, "x", 1)) >= 0 && (attr = nad_find_attr(data->nad, elem, -1, "stamp", NULL)) >= 0) { *************** *** 197,202 **** --- 203,211 ---- os_object_t o; st_ret_t ret; + /* time of this packet */ + t = time(NULL); + /* we want messages addressed to /announce */ if(pkt->type != pkt_MESSAGE || strlen(pkt->to->resource) < 8 || strncmp(pkt->to->resource, "announce", 8) != 0) return mod_PASS; *************** *** 212,218 **** store = pkt_dup(pkt, NULL, NULL); ! pkt_delay(store, time(NULL), mod->mm->sm->id); /* prepare for storage */ os = os_new(); --- 221,227 ---- store = pkt_dup(pkt, NULL, NULL); ! pkt_delay(store, t, mod->mm->sm->id); /* prepare for storage */ os = os_new();