net/xmppclient_listener.lua

changeset 2279
27441b099984
parent 2170
2abca9cc78b1
child 2454
e4818c49192d
equal deleted inserted replaced
2278:0b0fe49e5251 2279:27441b099984
59 session.notopen = true; 59 session.notopen = true;
60 60
61 function session.data(conn, data) 61 function session.data(conn, data)
62 local ok, err = parser:parse(data); 62 local ok, err = parser:parse(data);
63 if ok then return; end 63 if ok then return; end
64 log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " ")); 64 log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_"));
65 session:close("xml-not-well-formed"); 65 session:close("xml-not-well-formed");
66 end 66 end
67 67
68 return true; 68 return true;
69 end 69 end
98 session.send(reason); 98 session.send(reason);
99 end 99 end
100 end 100 end
101 end 101 end
102 session.send("</stream:stream>"); 102 session.send("</stream:stream>");
103 session.conn.close(); 103 session.conn:close();
104 xmppclient.disconnect(session.conn, (reason and (reason.text or reason.condition)) or reason or "session closed"); 104 xmppclient.ondisconnect(session.conn, (reason and (reason.text or reason.condition)) or reason or "session closed");
105 end 105 end
106 end 106 end
107 107
108 108
109 -- End of session methods -- 109 -- End of session methods --
110 110
111 function xmppclient.listener(conn, data) 111 function xmppclient.onincoming(conn, data)
112 local session = sessions[conn]; 112 local session = sessions[conn];
113 if not session then 113 if not session then
114 session = sm_new_session(conn); 114 session = sm_new_session(conn);
115 sessions[conn] = session; 115 sessions[conn] = session;
116 116
117 session.log("info", "Client connected"); 117 session.log("info", "Client connected");
118 118
119 -- Client is using legacy SSL (otherwise mod_tls sets this flag) 119 -- Client is using legacy SSL (otherwise mod_tls sets this flag)
120 if conn.ssl() then 120 if conn:ssl() then
121 session.secure = true; 121 session.secure = true;
122 end 122 end
123 123
124 session.reset_stream = session_reset_stream; 124 session.reset_stream = session_reset_stream;
125 session.close = session_close; 125 session.close = session_close;
131 if data then 131 if data then
132 session.data(conn, data); 132 session.data(conn, data);
133 end 133 end
134 end 134 end
135 135
136 function xmppclient.disconnect(conn, err) 136 function xmppclient.ondisconnect(conn, err)
137 local session = sessions[conn]; 137 local session = sessions[conn];
138 if session then 138 if session then
139 (session.log or log)("info", "Client disconnected: %s", err); 139 (session.log or log)("info", "Client disconnected: %s", err);
140 sm_destroy_session(session, err); 140 sm_destroy_session(session, err);
141 sessions[conn] = nil; 141 sessions[conn] = nil;
142 session = nil; 142 session = nil;
143 collectgarbage("collect");
144 end 143 end
145 end 144 end
146 145
147 connlisteners_register("xmppclient", xmppclient); 146 connlisteners_register("xmppclient", xmppclient);

mercurial