* Copyright (c) 2010, 2011, Jonathan Schleifer <js@webkeks.org>
* Copyright (c) 2011, Florian Zeitz <florob@babelmonkeys.de>
*
- * https://webkeks.org/hg/objxmpp/
+ * http://cgit.babelmonkeys.de/cgit.cgi/mpdbot/
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <assert.h>
-
#import <ObjFW/ObjFW.h>
#import <ObjXMPP/ObjXMPP.h>
#define NS_DISCO_INFO @"http://jabber.org/protocol/disco#info"
-@interface AppDelegate: OFObject
-#ifdef OF_HAVE_OPTIONAL_PROTOCOLS
- <OFApplicationDelegate, XMPPConnectionDelegate>
-#endif
-
+@interface AppDelegate: OFObject <OFApplicationDelegate, XMPPConnectionDelegate>
+{
OFString *discoID;
PEPThread *pepper;
+}
@end
OF_APPLICATION_DELEGATE(AppDelegate)
OFArray *arguments = [OFApplication arguments];
conn = [[XMPPConnection alloc] init];
- [conn setDelegate: self];
+ [conn addDelegate: self];
- if ([arguments count] != 3) {
- of_log(@"Invalid count of command line arguments!");
+ if (arguments.count != 3) {
+ [of_stdout writeFormat: @"Usage: %@ <server> <user> <passwd>\n",
+ [OFApplication programName]];
[OFApplication terminateWithStatus: 1];
}
- [conn setDomain: [arguments objectAtIndex: 0]];
- [conn setUsername: [arguments objectAtIndex: 1]];
- [conn setPassword: [arguments objectAtIndex: 2]];
- [conn setResource: @"ObjXMPP"];
+ conn.domain = [arguments objectAtIndex: 0];
+ conn.username = [arguments objectAtIndex: 1];
+ conn.password = [arguments objectAtIndex: 2];
+ conn.resource = @"ObjXMPP";
@try {
[conn connect];
[conn handleConnection];
} @catch (id e) {
- of_log(@"%@", e);
+ [of_stderr writeFormat: @"%@\n", e];
}
}
- (void)connectionWasAuthenticated: (XMPPConnection*)conn
{
- of_log(@"Auth successful");
+ [of_stdout writeLine: @"Auth successful"];
}
- (void)connection: (XMPPConnection*)conn
XMPPPresence *pres;
XMPPIQ *disco;
- of_log(@"Bound to JID: %@", [jid fullJID]);
+ [of_stdout writeFormat: @"Bound to JID: %@\n", [jid fullJID]];
pres = [XMPPPresence presence];
[pres addPriority: 0];
ID: discoID];
disco.to = [XMPPJID JIDWithString: [[conn JID] bareJID]];
[disco addChild: [OFXMLElement
- elementWithName: @"query"
- namespace: NS_DISCO_INFO]];
+ elementWithName: @"query"
+ namespace: NS_DISCO_INFO]];
[conn sendStanza: disco];
}
{
OFXMLElement *query = [iq elementForName: @"query"
namespace: NS_DISCO_INFO];
- if ([[iq ID] isEqual: discoID]) {
+ if ([iq.ID isEqual: discoID]) {
for (OFXMLElement *identity
in [query elementsForName: @"identity"
namespace: NS_DISCO_INFO]) {
pepper = [[PEPThread alloc]
initWithObject: conn];
[pepper start];
+
return YES;
}
}
+ [of_stderr writeLine: @"Server does NOT support PEP"];
}
return NO;
}
-- (void)connection: (XMPPConnection*)conn
- didReceiveMessage: (XMPPMessage*)msg
-{
- of_log(@"Message: %@", msg);
-}
-
- (void)connection: (XMPPConnection*)conn
didReceivePresence: (XMPPPresence*)pres
{
- of_log(@"Presence: %@", pres);
+ if ([pres.type isEqual: @"subscribe"]) {
+ XMPPPresence *answer;
+ answer = [XMPPPresence presenceWithType: @"subscribed"
+ ID: pres.ID];
+ answer.to = [XMPPJID JIDWithString: [pres.from bareJID]];
+ [conn sendStanza: answer];
+ }
}
- (void)connectionWasClosed: (XMPPConnection*)conn
{
- of_log(@"Connection was closed!");
+ [of_stdout writeLine: @"Connection was closed!"];
}
@end