示例#1
0
文件: str.c 项目: named-data/muc
/* convenience :) */
char *spools(pool p, ...)
{
    va_list ap;
    spool s;
    char *arg = NULL;

    if(p == NULL)
        return NULL;

    s = spool_new(p);

    va_start(ap, p);

    /* loop till we hit our end flag, the first arg */
    while(1)
    {
        arg = va_arg(ap,char *);
        if((pool)arg == p)
            break;
        else
            spool_add(s, arg);
    }

    va_end(ap);

    return spool_print(s);
}
示例#2
0
文件: ns.c 项目: Doap/transports
void mt_ns_msg(mpacket mp, session s)
{
    xmlnode msg, oob;
    char *body, *ctype, *ptr;
    /* message body spool*/
    pool p = pool_new();
    spool sp = spool_new(p);      

    if (s->ti->inbox_headlines == 0)
        return;

    ctype = strchr(mt_packet_data(mp,5),':') + 2;
    body = mt_packet_data(mp,mp->count - 1);

    /* this message is a Hotmail inbox notification */
    if ((strncmp(ctype,"text/x-msmsgsinitialemailnotification",37) != 0) &&
        (strncmp(ctype,"text/x-msmsgsemailnotification",30) != 0))
        return;
   
    /* Fede <*****@*****.**> */
    /* cut off the junk at the end */
    if ((ptr = strstr(body,"Inbox-URL")) != NULL) {
       *ptr = '\0';
       spool_add(sp,body);   
    } else {       
       if ((ptr = strstr(body,"From:")) != NULL) {
          char *p = strchr(ptr, '\r');	  
	  *p = '\0';
	  spooler(sp,"Mail from: ", ptr + 6,sp);
	  body = p + 1;
       }
       if ((ptr = strstr(body,"From-Addr:")) != NULL) {
          *strchr(ptr, '\r') = '\0';
	  spooler(sp," <",ptr + 11,">",sp);
       }       
    }
    
    msg = xmlnode_new_tag("message");
    xmlnode_put_attrib(msg,"to",jid_full(s->id));
    xmlnode_put_attrib(msg,"from",s->host);
    xmlnode_put_attrib(msg,"type","headline");

    xmlnode_insert_cdata(xmlnode_insert_tag(msg,"subject"),"Hotmail",-1);
    xmlnode_insert_cdata(xmlnode_insert_tag(msg,"body"),spool_print(sp),-1);

    oob = xmlnode_insert_tag(msg,"x");
    xmlnode_put_attrib(oob,"xmlns","jabber:x:oob");
    xmlnode_insert_cdata(xmlnode_insert_tag(oob,"url"),"http://www.hotmail.com/cgi-bin/folders",-1);
    xmlnode_insert_cdata(xmlnode_insert_tag(oob,"desc"),"Login to your Hotmail e-mail account",-1);

    mt_deliver(s->ti,msg);
   
    pool_free(p);
}
示例#3
0
文件: xmlnode.c 项目: bcy/muc
static spool _xmlnode2spool(xmlnode node)
{
    spool s;
    int level=0,dir=0;
    xmlnode tmp;

    if(!node || xmlnode_get_type(node)!=NTYPE_TAG)
        return NULL;

    s = spool_new(xmlnode_pool(node));
    if(!s) return(NULL);

    while(1)
    {
        if(dir==0)
        {
    	    if(xmlnode_get_type(node) == NTYPE_TAG)
            {
                if(xmlnode_has_children(node))
                {
                    _xmlnode_tag2str(s,node,1);
                    node = xmlnode_get_firstchild(node);
                    level++;
                    continue;
                }else{
                    _xmlnode_tag2str(s,node,0);
                }
            }else{
                spool_add(s,strescape(xmlnode_pool(node),xmlnode_get_data(node)));
            }
        }

    	tmp = xmlnode_get_nextsibling(node);
        if(!tmp)
        {
            node = xmlnode_get_parent(node);
            level--;
            if(level>=0) _xmlnode_tag2str(s,node,2);
            if(level<1) break;
            dir = 1;
        }else{
            node = tmp;
            dir = 0;
        }
    }

    return s;
}
示例#4
0
文件: jid.c 项目: named-data/muc
char *jid_full(jid id)
{
    spool s;

    if(id == NULL)
        return NULL;

    /* use cached copy */
    if(id->full != NULL)
        return id->full;

    s = spool_new(id->p);

    if(id->user != NULL)
        spooler(s, id->user,"@",s);

    spool_add(s, id->server);

    if(id->resource != NULL)
        spooler(s, "/",id->resource,s);

    id->full = spool_print(s);
    return id->full;
}
示例#5
0
文件: conference_room.c 项目: bcy/muc
void con_room_log_new(cnr room)
{
  char *filename;
  char *curdate;
  char *dirname;
  char datePart[5];
  struct stat fileinfo;
  time_t now = time(NULL);
  int type;
  pool p;
  spool sp;

  if(room == NULL || !room->master->logsEnabled) 
  {
    log_warn(NAME, "[%s] Aborting - NULL room", FZONE);
    return;
  }

  p = pool_heap(1024);
  type = room->logformat;
  dirname = jid_full(room->id);
  sp = spool_new(p);

  if(room->master->logdir)
  {
    spooler(sp, room->master->logdir, "/", dirname, sp);
  }
  else
  {
    spooler(sp, "./", dirname, sp);
  }

  filename = spool_print(sp);

  if(stat(filename,&fileinfo) < 0 && mkdir(filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0)
  {
    log_warn(NAME, "[%s] ERR: unable to open log directory >%s<", FZONE, filename);
    return;
  }

  curdate = dateget(now);

  if (room->master->flatLogs) {

    spooler(sp, "/", curdate, sp);

  }
  else {

    strftime(datePart, 5, "%Y", localtime(&now));
    
    spooler(sp, "/", datePart, sp);
    filename = spool_print(sp);
    if(stat(filename,&fileinfo) < 0 && mkdir(filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0)
    {
      log_warn(NAME, "[%s] ERR: unable to open log directory >%s<", FZONE, filename);
      return;
    }

    strftime(datePart, 5, "%m", localtime(&now));
    
    spooler(sp, "/", datePart, sp);
    filename = spool_print(sp);
    if(stat(filename,&fileinfo) < 0 && mkdir(filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0)
    {
      log_warn(NAME, "[%s] ERR: unable to open log directory >%s<", FZONE, filename);
      return;
    }

    strftime(datePart, 5, "%d", localtime(&now));
    
    spooler(sp, "/", datePart, sp);


  }

  if(type == LOG_XML)
    spool_add(sp, ".xml");
  else if(type == LOG_XHTML)
    spool_add(sp, ".html");
  else
    spool_add(sp, ".txt");


  filename = spool_print(sp);

  if(stat(filename,&fileinfo) < 0)
  {
    log_debug(NAME, "[%s] New logfile >%s<", FZONE, filename);

    room->logfile = fopen(filename, "a");

    if(type == LOG_XHTML && room->logfile != NULL)
    {
      fprintf(room->logfile, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n<title>Logs for %s, %s</title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n", jid_full(room->id), curdate);
     if (room->master->stylesheet!=NULL)
       fprintf(room->logfile, "<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\" />\n",room->master->stylesheet);
     fprintf(room->logfile, "</head><body>\n<p class=\"logs\">\n");

      fflush(room->logfile);
    }
  }
  else
  {
    room->logfile = fopen(filename, "a");
  }


  if(room->logfile == NULL)
    log_warn(NAME, "[%s] ERR: unable to open log file >%s<", FZONE, filename);
  else
    log_debug(NAME, "[%s] Opened logfile >%s<", FZONE, filename);

  pool_free(p);
  free(curdate);
  return;
}
示例#6
0
文件: ns.c 项目: Doap/transports
void mt_ns_not(mpacket mp, session s)
{
    int i = 0;
    xmlnode msg, oob1, oob2;
    /* message body spool*/
    pool p = pool_new();
    spool sp = spool_new(p);
    /* parsing the message... */
    xmlnode notification, msgtag, action, subscr, body, text;
    spool action_url = spool_new(p);
    spool subscr_url = spool_new(p);
    char *chunk, *fixedchunk, *notification_id, *msg_id, *bodytext;

    if (s->ti->inbox_headlines == 0)
        return;

    /* grab the <notification/> chunk */
    for(i = 2; i < mp->count; i++) {
        spool_add(sp, mt_packet_data(mp,i));
    }

    msg = xmlnode_new_tag("message");
    xmlnode_put_attrib(msg,"to",jid_full(s->id));
    xmlnode_put_attrib(msg,"from",s->host);
    xmlnode_put_attrib(msg,"type","headline");

    xmlnode_insert_cdata(xmlnode_insert_tag(msg,"subject"),"MSN Alert",-1);

    /* Parse the alert -- there's probably better ways to do this */
    chunk = spool_print(sp);
    log_debug(ZONE, "chunk from spool_print: \"%s\"", chunk);
    fixedchunk = mt_fix_amps(p, chunk);
    log_debug(ZONE, "fixedchunk: \"%s\"", fixedchunk);
    // Get the notification ID
    notification = xmlnode_str(fixedchunk, strlen(fixedchunk));
    notification_id = xmlnode_get_attrib(notification, "id");
    log_debug(ZONE, "notification - %X\nn_id - %s", notification, notification_id);
    // Get the message ID
    msgtag = xmlnode_get_tag(notification, "MSG");
    msg_id = xmlnode_get_attrib(msgtag, "id");
    // Get the action URL
    action = xmlnode_get_tag(msgtag, "ACTION");
    spool_add(action_url, xmlnode_get_attrib(action, "url"));
    spool_add(action_url, "&notification=");
    spool_add(action_url, notification_id);
    spool_add(action_url, "&message_id=");
    spool_add(action_url, msg_id);
    spool_add(action_url, "&agent=messenger");
    // Get the subscription URL
    subscr = xmlnode_get_tag(msgtag, "SUBSCR");
    spool_add(subscr_url, xmlnode_get_attrib(subscr, "url"));
    spool_add(subscr_url, "&notification=");
    spool_add(subscr_url, notification_id);
    spool_add(subscr_url, "&message_id=");
    spool_add(subscr_url, msg_id);
    spool_add(subscr_url, "&agent=messenger");
    // Get the body
    body = xmlnode_get_tag(msgtag, "BODY");
    text = xmlnode_get_tag(body, "TEXT");
    bodytext = xmlnode_get_data(text);
    /* Finished parsing the XML */

    // Insert the body
    xmlnode_insert_cdata(xmlnode_insert_tag(msg,"body"),bodytext,-1);
    
    // Insert the action URL
    oob1 = xmlnode_insert_tag(msg,"x");
    xmlnode_put_attrib(oob1,"xmlns","jabber:x:oob");
    xmlnode_insert_cdata(xmlnode_insert_tag(oob1,"url"),spool_print(action_url),-1);
    xmlnode_insert_cdata(xmlnode_insert_tag(oob1,"desc"),"More information on this alert",-1);
    
    // Insert the subscription URL
    oob2 = xmlnode_insert_tag(msg,"x");
    xmlnode_put_attrib(oob2,"xmlns","jabber:x:oob");
    xmlnode_insert_cdata(xmlnode_insert_tag(oob2,"url"),spool_print(subscr_url),-1);
    xmlnode_insert_cdata(xmlnode_insert_tag(oob2,"desc"),"Manage subscriptions to alerts",-1);

    mt_deliver(s->ti,msg);
    
    xmlnode_free(notification);
    
    pool_free(p);   
}