From 3f2a22140e1495123837c70a19da90383372ad6a Mon Sep 17 00:00:00 2001 From: Florian Zeitz Date: Thu, 10 Feb 2011 23:30:48 +0100 Subject: [PATCH] Add/use init functions in the XMPPStanza classes --- XMPPStanza.h | 29 +++++++++ XMPPStanza.m | 168 +++++++++++++++++++++++++++++++++++++++------------ XMPPStanza.o | Bin 34856 -> 40768 bytes 3 files changed, 158 insertions(+), 39 deletions(-) diff --git a/XMPPStanza.h b/XMPPStanza.h index 13f8d39..eeebe1d 100644 --- a/XMPPStanza.h +++ b/XMPPStanza.h @@ -14,9 +14,23 @@ @property (copy) OFString *ID; + stanzaWithName: (OFString*)name; ++ stanzaWithName: (OFString*)name + type: (OFString*)type_; ++ stanzaWithName: (OFString*)name + ID: (OFString*)ID_; ++ stanzaWithName: (OFString*)name + type: (OFString*)type_ + ID: (OFString*)ID_; + stanzaWithElement: (OFXMLElement*)elem; - initWithName: (OFString*)name; +- initWithName: (OFString*)name + type: (OFString*)type_; +- initWithName: (OFString*)name + ID: (OFString*)ID_; +- initWithName: (OFString*)name + type: (OFString*)type_ + ID: (OFString*)ID_; - initWithElement: (OFXMLElement*)elem; @end @@ -26,6 +40,9 @@ + IQWithType: (OFString*)type_ ID: (OFString*)ID_; + +- initWithType: (OFString*)type_ + ID: (OFString*)ID_; @end @interface XMPPMessage: XMPPStanza @@ -38,6 +55,12 @@ + messageWithType: (OFString*)type_ ID: (OFString*)ID_; +- init; +- initWithID: (OFString*)ID_; +- initWithType: (OFString*)type_; +- initWithType: (OFString*)type_ + ID: (OFString*)ID_; + - (void)addBody: (OFString*)body; @end @@ -51,6 +74,12 @@ + presenceWithType: (OFString*)type_ ID: (OFString*)ID_; +- init; +- initWithID: (OFString*)ID_; +- initWithType: (OFString*)type_; +- initWithType: (OFString*)type_ + ID: (OFString*)ID_; + - (void)addShow: (OFString*)show; - (void)addStatus: (OFString*)status; - (void)addPriority: (int8_t)priority; diff --git a/XMPPStanza.m b/XMPPStanza.m index c381c3c..7b9762a 100644 --- a/XMPPStanza.m +++ b/XMPPStanza.m @@ -11,26 +11,73 @@ return [[[self alloc] initWithName: name] autorelease]; } ++ stanzaWithName: (OFString*)name + type: (OFString*)type_ +{ + return [[[self alloc] initWithName: name + type: type_] autorelease]; +} + ++ stanzaWithName: (OFString*)name + ID: (OFString*)ID_ +{ + return [[[self alloc] initWithName: name + ID: ID_] autorelease]; +} + ++ stanzaWithName: (OFString*)name + type: (OFString*)type_ + ID: (OFString*)ID_ +{ + return [[[self alloc] initWithName: name + type: type_ + ID: ID_] autorelease]; +} + + stanzaWithElement: (OFXMLElement*)elem { return [[[self alloc] initWithElement: elem] autorelease]; } - initWithName: (OFString*)name_ +{ + return [self initWithName: name_ + type: nil + ID: nil]; +} + +- initWithName: (OFString*)name_ + type: (OFString*)type_ +{ + return [self initWithName: name_ + type: type_ + ID: nil]; +} + +- initWithName: (OFString*)name_ + ID: (OFString*)ID_ +{ + return [self initWithName: name_ + type: nil + ID: ID_]; +} + +- initWithName: (OFString*)name_ + type: (OFString*)type_ + ID: (OFString*)ID_ { if (!([name_ isEqual: @"iq"] || [name_ isEqual: @"message"] || [name_ isEqual: @"presence"])) of_log(@"Invalid stanza name!"); - self = [super initWithName: name_]; + id ret; + ret = [super initWithName: name_]; [self setDefaultNamespace: @"jabber:client"]; - - from = [[OFString alloc] init]; - to = [[OFString alloc] init]; - type = [[OFString alloc] init]; - ID = [[OFString alloc] init]; - - return self; + if (type_) + [ret setType: type_]; + if (ID_) + [ret setID: ID_]; + return ret; } - initWithElement: (OFXMLElement*)elem @@ -38,11 +85,6 @@ self = [super initWithName: elem.name namespace: elem.namespace]; - from = [[OFString alloc] init]; - to = [[OFString alloc] init]; - type = [[OFString alloc] init]; - ID = [[OFString alloc] init]; - OFXMLAttribute *attr; for (attr in elem.attributes) { @@ -107,13 +149,21 @@ OFString* old = ID; ID = [ID_ copy]; [old release]; - [self addAttributeWithName: @"id" stringValue: ID]; + [self addAttributeWithName: @"id" + stringValue: ID]; } @end @implementation XMPPIQ + IQWithType: (OFString*)type_ ID: (OFString*)ID_ +{ + return [[[self alloc] initWithType: type_ + ID: ID_] autorelease]; +} + +- initWithType: (OFString*)type_ + ID: (OFString*)ID_ { if (!([type_ isEqual: @"get"] || [type_ isEqual: @"set"] || @@ -121,40 +171,59 @@ [type_ isEqual: @"error"])) of_log(@"Invalid IQ type!"); - id ret; - ret = [[[self alloc] initWithName: @"iq"] autorelease]; - [ret setType: type_]; - [ret setID: ID_]; - return ret; + return [super initWithName: @"iq" + type: type_ + ID: ID_]; } @end @implementation XMPPMessage + message { - return [self messageWithType: nil ID: nil]; + return [[[self alloc] init] autorelease]; } + messageWithID: (OFString*)ID_ { - return [self messageWithType: nil ID: ID_]; + return [[[self alloc] initWithID: ID_] autorelease]; } + messageWithType: (OFString*)type_ { - return [self messageWithType: type_ ID: nil]; + return [[[self alloc] initWithType: type_] autorelease]; } + messageWithType: (OFString*)type_ ID: (OFString*)ID_ { - id ret; - ret = [[[self alloc] initWithName: @"message"] autorelease]; - if (type_) - [ret setType: type_]; - if (ID_) - [ret setID: ID_]; - return ret; + return [[[self alloc] initWithType: type_ + ID: ID_] autorelease]; +} + +- init +{ + return [self initWithType: nil + ID: nil]; +} + +- initWithID: (OFString*)ID_ +{ + return [self initWithType: nil + ID: ID_]; +} + +- initWithType: (OFString*)type_ +{ + return [self initWithType: type_ + ID: nil]; +} + +- initWithType: (OFString*)type_ + ID: (OFString*)ID_ +{ + return [super initWithName: @"message" + type: type_ + ID: ID_]; } - (void)addBody: (OFString*)body @@ -167,29 +236,50 @@ @implementation XMPPPresence + presence { - return [self presenceWithType: nil ID: nil]; + return [[[self alloc] init] autorelease]; } + presenceWithID: (OFString*)ID_ { - return [self presenceWithType: nil ID: ID_]; + return [[[self alloc] initWithID: ID_] autorelease]; } + presenceWithType: (OFString*)type_ { - return [self presenceWithType: type_ ID: nil]; + return [[[self alloc] initWithType: type_] autorelease]; } + presenceWithType: (OFString*)type_ ID: (OFString*)ID_ { - id ret; - ret = [[[self alloc] initWithName: @"presence"] autorelease]; - if (type_) - [ret setType: type_]; - if (ID_) - [ret setID: ID_]; - return ret; + return [[[self alloc] initWithType: type_ + ID: ID_] autorelease]; +} + +- init +{ + return [self initWithType: nil + ID: nil]; +} + +- initWithID: (OFString*)ID_ +{ + return [self initWithType: nil + ID: ID_]; +} + +- initWithType: (OFString*)type_ +{ + return [self initWithType: type_ + ID: nil]; +} + +- initWithType: (OFString*)type_ + ID: (OFString*)ID_ +{ + return [super initWithName: @"presence" + type: type_ + ID: ID_]; } - (void)addShow: (OFString*)show diff --git a/XMPPStanza.o b/XMPPStanza.o index 5d037ac6e11e52fa8a956acfe09ff30dc775f02f..648bbe86b343c456a1eb41652db9494c3e7b1029 100644 GIT binary patch literal 40768 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 literal 34856 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