Merge Bill Erickson's fixes (r1730, r1731) from trunk for recent versions of ejabberd
authordbs <dbs@9efc2488-bf62-4759-914b-345cdb29e865>
Fri, 20 Nov 2009 20:56:25 +0000 (20:56 +0000)
committerdbs <dbs@9efc2488-bf62-4759-914b-345cdb29e865>
Fri, 20 Nov 2009 20:56:25 +0000 (20:56 +0000)
Set the 'from' address in outbound xmpp messages

git-svn-id: svn://svn.open-ils.org/OpenSRF/branches/rel_1_2@1861 9efc2488-bf62-4759-914b-345cdb29e865

include/opensrf/transport_client.h
src/libopensrf/transport_client.c
src/perl/lib/OpenSRF/Transport/SlimJabber/Client.pm

index 2bd7605..d7dffb9 100644 (file)
@@ -20,6 +20,8 @@ struct transport_client_struct {
        transport_message* msg_q_tail;
        transport_session* session;
        int error;
+    char* host;
+    char* xmpp_id;
 };
 typedef struct transport_client_struct transport_client;
 
index be83eb7..1d9f7fe 100644 (file)
@@ -62,6 +62,7 @@ transport_client* client_init( const char* server, int port, const char* unix_pa
 
        client->session->message_callback = client_message_handler;
        client->error = 0;
+    client->host = strdup(server);
 
        return client;
 }
@@ -71,6 +72,7 @@ int client_connect( transport_client* client,
                const char* username, const char* password, const char* resource, 
                int connect_timeout, enum TRANSPORT_AUTH_TYPE  auth_type ) {
        if(client == NULL) return 0; 
+    client->xmpp_id = va_list_to_string("%s@%s/%s", username, client->host, resource);
        return session_connect( client->session, username, 
                        password, resource, connect_timeout, auth_type );
 }
@@ -89,6 +91,7 @@ int client_connected( const transport_client* client ) {
 int client_send_message( transport_client* client, transport_message* msg ) {
        if(client == NULL) return 0;
        if( client->error ) return -1;
+    msg->sender = strdup(client->xmpp_id); // free'd in message_free
        return session_send_msg( client->session, msg );
 }
 
@@ -186,6 +189,8 @@ int client_free( transport_client* client ){
                current = next;
        }
 
+    free(client->host);
+    free(client->xmpp_id);
        free( client );
        return 1;
 }
index e6f6705..f30abf5 100644 (file)
@@ -113,6 +113,7 @@ sub send {
        my $self = shift;
     my $msg = OpenSRF::Transport::SlimJabber::XMPPMessage->new(@_);
     $msg->osrf_xid($logger->get_osrf_xid);
+    $msg->from($self->xmpp_id);
     $self->reader->send($msg->to_xml);
 }
 
@@ -130,8 +131,6 @@ sub initialize {
        my $resource    = $self->params->{resource};
        my $password    = $self->params->{password};
 
-    my $jid = "$username\@$host/$resource";
-
        my $conf = OpenSRF::Utils::Config->current;
 
        my $tail = "_$$";
@@ -153,10 +152,19 @@ sub initialize {
     throw OpenSRF::EX::Jabber("Could not authenticate with Jabber server: $@")
            unless ( $self->reader->connected );
 
+    $self->xmpp_id("$username\@$host/$resource");
        return $self;
 }
 
 
+# Our full login:  username@host/resource
+sub xmpp_id {
+    my($self, $xmpp_id) = @_;
+    $self->{xmpp_id} = $xmpp_id if $xmpp_id;
+    return $self->{xmpp_id};
+}
+
+
 =head2 construct
 
 =cut