示例#1
0
static void
connection_auth_cb (LmConnection *connection, 
                    gboolean      success, 
                    gpointer      user_data)
{
    if (success) {
        GError    *error = NULL;
        LmMessage *m;

        g_print ("LmSendAsync: Authenticated successfully\n");
        
        m = lm_message_new (recipient, LM_MESSAGE_TYPE_MESSAGE);
        lm_message_node_add_child (m->node, "body", message);
        
        if (!lm_connection_send (connection, m, &error)) {
            g_printerr ("LmSendAsync: Failed to send message:'%s'\n", 
                        lm_message_node_to_string (m->node));
        } else {
            g_print ("LmSendAsync: Sent message:'%s'\n", 
                     lm_message_node_to_string (m->node));
            test_success = TRUE;
        }
        
        lm_message_unref (m);
    } else {
        g_printerr ("LmSendAsync: Failed to authenticate\n");
    }

    lm_connection_close (connection, NULL);
    g_main_loop_quit (main_loop);
}
示例#2
0
static void handle_event(LmMessage* message) {
  LmMessageNode *child = NULL;
  XML_Parser p;
  char *buf = NULL;
  const char *new_node = NULL;
  int ret;

#ifdef DB_DEBUG
  printf("message:%s\n",lm_message_node_to_string(message->node));
#endif

  //If message is a DeviceCreation message, subscribe to new event node
  child = lm_message_node_find_child(message->node,"Created");
  if(child != NULL) {
    new_node = lm_message_node_get_attribute(child,"name");
#ifdef DB_DEBUG
    printf("Got DeviceCreation message for '%s'\n",new_node);
#endif
    g_print("Got DeviceCreation message for '%s'\n",new_node);
    if((ret = subscribe_to_node(xmpp_connection,new_node)) != XMPP_NO_ERROR)
      printf("Could not subscribe to event node '%s'\n",new_node);
    return;
  }

  //Look for SensorNode in message, and invoke parser to update database entries
  child = lm_message_node_find_child(message->node,"Device");
  if(child == NULL) {
      return;
  }

  buf = lm_message_node_to_string(child);

  p = XML_ParserCreate(NULL);
  if(!p) {
    printf("Couldnt allocate memory for XML Parser\n");
    return;
  }

  XML_SetElementHandler(p,startElement,endElement);
  
  if(XML_Parse(p,buf,strlen(buf),1) == XML_STATUS_ERROR) {
    printf("Parse Error at line %u:\n%s\n",
	   XML_GetCurrentLineNumber(p),
	   XML_ErrorString(XML_GetErrorCode(p)));
    return;
  }

  XML_ParserFree(p);
}
示例#3
0
LmHandlerResult
LM::Presentity::handle_edit_reply (LmConnection* /*connection*/,
				   LmMessage* message)
{
  if (lm_message_get_sub_type (message) == LM_MESSAGE_SUB_TYPE_ERROR) {

    std::cout << "Don't know how to handle : " << lm_message_node_to_string (lm_message_get_node (message)) << std::endl;
  }

  return LM_HANDLER_RESULT_REMOVE_MESSAGE;
}
示例#4
0
static void
send_stanza(XMPP_SERVER_REC *server, LmMessage *lmsg)
{
	char *xml, *recoded;

	g_return_if_fail(IS_XMPP_SERVER(server));
	g_return_if_fail(lmsg != NULL);
	xml = lm_message_node_to_string(lmsg->node);
	recoded = xmpp_recode_in(xml);
	g_free(xml);
	signal_emit("xmpp xml out", 2, server, recoded);
	g_free(recoded);
	lm_connection_send(server->lmconn, lmsg, NULL);
}
示例#5
0
文件: IoLoudmouth.c 项目: ADTSH/io
LmHandlerResult onXmppMessage
  (LmMessageHandler *handler, LmConnection *connection, LmMessage *m, void* data)
{
  IoObject *self = data;

  IoList_rawAppend_(
    (IoList *)IoObject_getSlot_(self, IOSYMBOL("_msgsBuffer")),
    IOSYMBOL(lm_message_node_to_string(m->node))
  );

  IoMessage *io_m = IoMessage_newWithName_label_(IOSTATE, IOSYMBOL("parseMessage"), IOSYMBOL("Loudmouth"));
  IoMessage_locals_performOn_(io_m, self, self);

  return LM_HANDLER_RESULT_REMOVE_MESSAGE;
}
示例#6
0
static LmHandlerResult
handle_stanza(LmMessageHandler *handler, LmConnection *connection,
    LmMessage *lmsg, gpointer user_data)
{
	XMPP_SERVER_REC *server;
	int type;
	const char *id;
	char *from, *to, *raw;

	if ((server = XMPP_SERVER(user_data)) == NULL)
		return LM_HANDLER_RESULT_REMOVE_MESSAGE;
	raw = xmpp_recode_in(lm_message_node_to_string(lmsg->node));
	signal_emit("xmpp xml in", 2, server, raw);
	g_free(raw);
	type = lm_message_get_sub_type(lmsg);
	id = lm_message_node_get_attribute(lmsg->node, "id");
	if (id == NULL)
		id = "";
	from = xmpp_recode_in(lm_message_node_get_attribute(lmsg->node, "from"));
	if (from == NULL)
		from = g_strdup("");
	to = xmpp_recode_in(lm_message_node_get_attribute(lmsg->node, "to"));
	if (to == NULL)
		to = g_strdup("");
	switch(lm_message_get_type(lmsg)) {
	case LM_MESSAGE_TYPE_MESSAGE:
		signal_emit("xmpp recv message", 6,
		    server, lmsg, type, id, from, to);
		break;
	case LM_MESSAGE_TYPE_PRESENCE:
		signal_emit("xmpp recv presence", 6,
		    server, lmsg, type, id, from, to);
		break;
	case LM_MESSAGE_TYPE_IQ:
		signal_emit("xmpp recv iq", 6,
		    server, lmsg, type, id, from, to);
		break;
	default:
		signal_emit("xmpp recv others", 6,
		    server, lmsg, type, id, from, to);
		break;
	}
	g_free(from);
	g_free(to);
	return LM_HANDLER_RESULT_REMOVE_MESSAGE;
}
示例#7
0
static void
authentication_cb (LmConnection *connection, gboolean result, gpointer ud)
{
        g_print ("Auth: %d\n", result);
	free_user_info ((UserInfo *) ud);
 
        if (result == TRUE) {
                LmMessage *m;
                 
		m = lm_message_new_with_sub_type (NULL,
                                                  LM_MESSAGE_TYPE_PRESENCE,
                                                  LM_MESSAGE_SUB_TYPE_AVAILABLE);
                g_print (":: %s\n", lm_message_node_to_string (m->node));
                 
                lm_connection_send (connection, m, NULL);
                lm_message_unref (m);
        }

}
示例#8
0
void jabber_get_version(gpointer user_data)
{
	LmMessage *m;
	LmMessageNode *node;
	GGaduContact *k = user_data;
	GGaduContact *k0;
	GSList *roster = ggadu_repo_get_as_slist("jabber", REPO_VALUE_CONTACT);
	GSList *temp = roster;
	gchar *string0, *string1;

	while (temp)
	{
		k0 = temp->data;
		if (!ggadu_strcasecmp(k->id, k0->id))
			break;

		temp = temp->next;
	}

	string0 = g_strconcat(k0->id, "/", k0->resource, NULL);
	m = lm_message_new_with_sub_type(string0, LM_MESSAGE_TYPE_IQ, LM_MESSAGE_SUB_TYPE_GET);
	string1 = g_strconcat(ggadu_config_var_get(jabber_handler, "jid"), "/",
			      ggadu_config_var_get(jabber_handler, "resource") ? ggadu_config_var_get(jabber_handler, "resource") : JABBER_DEFAULT_RESOURCE, NULL);
	lm_message_node_set_attribute(m->node, "from", string1);
	lm_message_node_set_attribute(m->node, "id", "version_1");
	node = lm_message_node_add_child(m->node, "query", NULL);
	lm_message_node_set_attribute(node, "xmlns", "jabber:iq:version");
	print_debug(lm_message_node_to_string(m->node));
	lm_connection_send(jabber_data.connection, m, NULL);
	lm_message_unref(m);

	g_free(string0);
	g_free(string1);
	g_slist_free(roster);

	return;
}
示例#9
0
LmHandlerResult
LM::Account::handle_presence (LmMessage* message)
{
  LmHandlerResult result = LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;

  if (result == LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS) {

    result = dialect->handle_presence (connection, message);
  }

  if (result == LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS) {

    result = cluster->handle_presence (connection, message);
  }

#if DEBUG
  if (result == LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS) {

    std::cout << "Nobody cared about : " << lm_message_node_to_string (lm_message_get_node (message)) << std::endl;
  }
#endif

  return result;
}
示例#10
0
static LmHandlerResult
xmp_message_callback (LmMessageHandler * handler, LmConnection * connection,
                      LmMessage * message, gpointer user_data)
{
  g_print ("%s\n", lm_message_node_to_string (message->node));
}
示例#11
0
void jabber_change_status(GGaduStatusPrototype *sp, gboolean keep_desc)
{
	enum states status;
	LmMessage *m = NULL;
	gchar *show = NULL;
	gchar *show_away = "away";
	gchar *show_xa = "xa";
	gchar *show_dnd = "dnd";
	gchar *show_chat = "chat";
	
	print_debug("jabber_change_status start");
	
	if (!sp)
	    return;
	
	status = sp->status;
	
	/* Just a simple esthetic functionality */
	if((jabber_data.status == JABBER_STATUS_UNAVAILABLE) && sp->status == JABBER_STATUS_UNAVAILABLE)
	{
		GGaduStatusPrototype *sp_temp = ggadu_find_status_prototype(p, jabber_data.status);

		sp_temp->status = JABBER_STATUS_UNAVAILABLE;
		if(sp_temp->status_description)
		{
		    g_free(sp_temp->status_description);
		    sp_temp->status_description = NULL;
		}

		signal_emit("jabber", "gui status changed", sp_temp, "main-gui");
		GGaduStatusPrototype_free(sp_temp);
		return;
	}

	if (status == JABBER_STATUS_UNAVAILABLE)
	{
		lm_connection_close(jabber_data.connection, NULL);
		return;
	}

	/* connect if switched to any other than unavailable */	
	if ((jabber_data.status == JABBER_STATUS_UNAVAILABLE) && (status != JABBER_STATUS_UNAVAILABLE) &&
	    (!jabber_data.connection || !lm_connection_is_open(jabber_data.connection) ||
	     !lm_connection_is_authenticated(jabber_data.connection)))
	{
		g_thread_create(jabber_login_connect, (gpointer) status, FALSE, NULL);
		return;
	}

	
	if (jabber_data.connection && !lm_connection_is_authenticated(jabber_data.connection))
	{
		print_debug("You are not yet authenticated!");
		return;
	}
	
	m = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_PRESENCE,
					 (status == JABBER_STATUS_UNAVAILABLE) ? 
					 LM_MESSAGE_SUB_TYPE_UNAVAILABLE : LM_MESSAGE_SUB_TYPE_AVAILABLE);

	/* switch (status == JABBER_STATUS_DESCR ? jabber_data.status : status) */
	switch (status)
	{
	case JABBER_STATUS_AWAY:
		show = show_away;
		break;
	case JABBER_STATUS_XA:
		show = show_xa;
		break;
	case JABBER_STATUS_DND:
		show = show_dnd;
		break;
	case JABBER_STATUS_CHAT:
		show = show_chat;
		break;
	case JABBER_STATUS_AVAILABLE:
		show = NULL;
		break;
	default:
		break;
	}

	if (show)
		lm_message_node_add_child(m->node, "show", show);

	if(keep_desc)
	{
	    if(sp->status_description) g_free(sp->status_description);
	    sp->status_description = g_strdup(jabber_data.description);
	}

	if(jabber_data.description)
	{
	    g_free(jabber_data.description);
	    jabber_data.description = NULL;
	}

	if (sp->status_description)
	{
		print_debug("jabber: status description %s %s",sp->status_description,show);
		lm_message_node_add_child(m->node, "status", sp->status_description);
		jabber_data.description = g_strdup(sp->status_description);
	}

	print_debug(lm_message_node_to_string(m->node));

	if (!lm_connection_send(jabber_data.connection, m, NULL))
	{
		print_debug("jabber: Couldn't change status!\n");
	}
	else
	{
		jabber_data.status = status;
		signal_emit("jabber", "gui status changed", sp, "main-gui");
	}
	lm_message_unref(m);
	print_debug("jabber_change_status end");
}