structs.go
changeset 17 d269d9c0fc8e
parent 12 122ab6208c3c
child 20 e119444a1119
equal deleted inserted replaced
16:b839e37b3f29 17:d269d9c0fc8e
    28 }
    28 }
    29 var _ fmt.Stringer = &JID{}
    29 var _ fmt.Stringer = &JID{}
    30 var _ flag.Value = &JID{}
    30 var _ flag.Value = &JID{}
    31 
    31 
    32 // XMPP's <stream:stream> XML element
    32 // XMPP's <stream:stream> XML element
       
    33 // TODO Hide this.
    33 type Stream struct {
    34 type Stream struct {
    34 	To string `xml:"attr"`
    35 	To string `xml:"attr"`
    35 	From string `xml:"attr"`
    36 	From string `xml:"attr"`
    36 	Id string `xml:"attr"`
    37 	Id string `xml:"attr"`
    37 	Lang string `xml:"attr"`
    38 	Lang string `xml:"attr"`
    39 }
    40 }
    40 var _ xml.Marshaler = &Stream{}
    41 var _ xml.Marshaler = &Stream{}
    41 var _ fmt.Stringer = &Stream{}
    42 var _ fmt.Stringer = &Stream{}
    42 
    43 
    43 // <stream:error>
    44 // <stream:error>
       
    45 // TODO Can this be consolidated with Error?
    44 type StreamError struct {
    46 type StreamError struct {
    45 	Any definedCondition
    47 	Any definedCondition
    46 	Text *errText
    48 	Text *errText
    47 }
    49 }
    48 var _ xml.Marshaler = &StreamError{}
    50 var _ xml.Marshaler = &StreamError{}
    49 
    51 
       
    52 // TODO Replace this with Unrecognized.
    50 type definedCondition struct {
    53 type definedCondition struct {
    51 	// Must always be in namespace nsStreams
    54 	// Must always be in namespace nsStreams
    52 	XMLName xml.Name
    55 	XMLName xml.Name
    53 	Chardata string `xml:"chardata"`
    56 	Chardata string `xml:"chardata"`
    54 }
    57 }
    57 	Lang string `xml:"attr"`
    60 	Lang string `xml:"attr"`
    58 	Text string `xml:"chardata"`
    61 	Text string `xml:"chardata"`
    59 }
    62 }
    60 var _ xml.Marshaler = &errText{}
    63 var _ xml.Marshaler = &errText{}
    61 
    64 
       
    65 // TODO Store this in Client and make it available to the app.
    62 type Features struct {
    66 type Features struct {
    63 	Starttls *starttls
    67 	Starttls *starttls
    64 	Mechanisms mechs
    68 	Mechanisms mechs
    65 	Bind *Unrecognized
    69 	Bind *Unrecognized
    66 }
    70 }
    67 
    71 
    68 type starttls struct {
    72 type starttls struct {
    69 	XMLName xml.Name
    73 	XMLName xml.Name
    70 	required *string
    74 	Required *string
    71 }
    75 }
    72 
    76 
    73 type mechs struct {
    77 type mechs struct {
    74 	Mechanism []string
    78 	Mechanism []string
    75 }
    79 }
    79 	Chardata string `xml:"chardata"`
    83 	Chardata string `xml:"chardata"`
    80 	Mechanism string `xml:"attr"`
    84 	Mechanism string `xml:"attr"`
    81 	Any *Unrecognized
    85 	Any *Unrecognized
    82 }
    86 }
    83 
    87 
       
    88 // One of the three core XMPP stanza types: iq, message, presence. See
       
    89 // RFC3920, section 9.
    84 type Stanza interface {
    90 type Stanza interface {
       
    91 	// Returns "iq", "message", or "presence".
    85 	XName() string
    92 	XName() string
       
    93 	// The to attribute.
    86 	XTo() string
    94 	XTo() string
       
    95 	// The from attribute.
    87 	XFrom() string
    96 	XFrom() string
       
    97 	// The id attribute.
    88 	XId() string
    98 	XId() string
       
    99 	// The type attribute.
    89 	XType() string
   100 	XType() string
       
   101 	// The xml:lang attribute.
    90 	XLang() string
   102 	XLang() string
       
   103 	// A nested error element, if any.
    91 	XError() *Error
   104 	XError() *Error
       
   105 	// A (non-error) nested element, if any.
    92 	XChild() *Unrecognized
   106 	XChild() *Unrecognized
    93 }
   107 }
    94 
   108 
       
   109 // message stanza
    95 type Message struct {
   110 type Message struct {
    96 	To string `xml:"attr"`
   111 	To string `xml:"attr"`
    97 	From string `xml:"attr"`
   112 	From string `xml:"attr"`
    98 	Id string `xml:"attr"`
   113 	Id string `xml:"attr"`
    99 	Type string `xml:"attr"`
   114 	Type string `xml:"attr"`
   102 	Any *Unrecognized
   117 	Any *Unrecognized
   103 }
   118 }
   104 var _ xml.Marshaler = &Message{}
   119 var _ xml.Marshaler = &Message{}
   105 var _ Stanza = &Message{}
   120 var _ Stanza = &Message{}
   106 
   121 
       
   122 // presence stanza
   107 type Presence struct {
   123 type Presence struct {
   108 	To string `xml:"attr"`
   124 	To string `xml:"attr"`
   109 	From string `xml:"attr"`
   125 	From string `xml:"attr"`
   110 	Id string `xml:"attr"`
   126 	Id string `xml:"attr"`
   111 	Type string `xml:"attr"`
   127 	Type string `xml:"attr"`
   114 	Any *Unrecognized
   130 	Any *Unrecognized
   115 }
   131 }
   116 var _ xml.Marshaler = &Presence{}
   132 var _ xml.Marshaler = &Presence{}
   117 var _ Stanza = &Presence{}
   133 var _ Stanza = &Presence{}
   118 
   134 
       
   135 // iq stanza
   119 type Iq struct {
   136 type Iq struct {
   120 	To string `xml:"attr"`
   137 	To string `xml:"attr"`
   121 	From string `xml:"attr"`
   138 	From string `xml:"attr"`
   122 	Id string `xml:"attr"`
   139 	Id string `xml:"attr"`
   123 	Type string `xml:"attr"`
   140 	Type string `xml:"attr"`
   126 	Any *Unrecognized
   143 	Any *Unrecognized
   127 }
   144 }
   128 var _ xml.Marshaler = &Iq{}
   145 var _ xml.Marshaler = &Iq{}
   129 var _ Stanza = &Iq{}
   146 var _ Stanza = &Iq{}
   130 
   147 
       
   148 // Describes an XMPP stanza error. See RFC 3920, Section 9.3.
   131 type Error struct {
   149 type Error struct {
       
   150 	// The error type attribute.
   132 	Type string `xml:"attr"`
   151 	Type string `xml:"attr"`
       
   152 	// Any nested element, if present.
   133 	Any *Unrecognized
   153 	Any *Unrecognized
   134 }
   154 }
   135 var _ xml.Marshaler = &Error{}
   155 var _ xml.Marshaler = &Error{}
   136 
   156 
       
   157 // Holds an XML element not described by the more specific types.
   137 // TODO Rename this to something like Generic.
   158 // TODO Rename this to something like Generic.
   138 type Unrecognized struct {
   159 type Unrecognized struct {
   139 	XMLName xml.Name
   160 	XMLName xml.Name
   140 	Any *Unrecognized
   161 	Any *Unrecognized
   141 	Chardata string `xml:"chardata"`
   162 	Chardata string `xml:"chardata"`