194 sc = (SessionContent*)el->data; |
194 sc = (SessionContent*)el->data; |
195 if (sc->appfuncs->handle == NULL) |
195 if (sc->appfuncs->handle == NULL) |
196 continue; |
196 continue; |
197 |
197 |
198 if (sc->appfuncs->handle(JINGLE_SESSION_INFO, sc->description, |
198 if (sc->appfuncs->handle(JINGLE_SESSION_INFO, sc->description, |
199 jn->node->children)) { |
199 jn->node->children, NULL)) { |
200 jingle_ack_iq(jn->message); |
200 jingle_ack_iq(jn->message); |
201 return; |
201 return; |
202 } |
202 } |
203 } |
203 } |
204 /* "If the party that receives an informational message |
204 /* "If the party that receives an informational message |
232 jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL); |
232 jingle_send_iq_error(jn->message, "cancel", "bad-request", NULL); |
233 return; |
233 return; |
234 } |
234 } |
235 |
235 |
236 jingle_ack_iq(jn->message); |
236 jingle_ack_iq(jn->message); |
237 |
237 |
238 sc2->sid = sess->sid; |
238 sc2->sid = sess->sid; |
239 sc2->from = (sess->origin == JINGLE_SESSION_INCOMING) ? sess->from : sess->to; |
239 sc2->from = (sess->origin == JINGLE_SESSION_INCOMING) ? sess->from : sess->to; |
240 |
240 |
241 // TODO: it's really bad done! |
241 // TODO: it's really bad done! |
242 for (el = jn->content; el; el = el->next) { |
242 for (el = jn->content; el; el = el->next) { |
243 jc = (JingleContent*)el->data; |
243 jc = (JingleContent*)el->data; |
244 sc2->name = jc->name; |
244 sc2->name = jc->name; |
245 sc = session_find_sessioncontent(sess, jc->name); |
245 sc = session_find_sessioncontent(sess, jc->name); |
246 session_changestate_sessioncontent(sess, jc->name, |
246 session_changestate_sessioncontent(sess, jc->name, |
247 JINGLE_SESSION_STATE_ACTIVE); |
247 JINGLE_SESSION_STATE_ACTIVE); |
248 sc->transfuncs->init(sc2, sc->transfuncs->check(jc, NULL)); |
248 sc->transfuncs->handle(JINGLE_SESSION_ACCEPT, sc->transport, jn->node, NULL); |
249 } |
249 sc->transfuncs->init(sc2); |
250 |
250 } |
|
251 |
251 // We delete content who haven't been accepted |
252 // We delete content who haven't been accepted |
252 for (el = sess->content; el; el = el->next) { |
253 for (el = sess->content; el; el = el->next) { |
253 sc = (SessionContent*) el->data; |
254 sc = (SessionContent*) el->data; |
254 if (sc->state == JINGLE_SESSION_STATE_PENDING) { |
255 if (sc->state == JINGLE_SESSION_STATE_PENDING) { |
255 scr_log_print(LPRINT_DEBUG, "Delete %s!", sc->name); |
256 scr_log_print(LPRINT_DEBUG, "Delete %s!", sc->name); |
256 session_remove_sessioncontent(sess, sc->name); |
257 session_remove_sessioncontent(sess, sc->name); |
257 } |
258 } |
258 } |
259 } |
259 |
260 |
260 // Go go go! We start jobs! |
261 // Go go go! We start jobs! |
261 for (el = sess->content; el; el = el->next) { |
262 for (el = sess->content; el; el = el->next) { |
262 sc = (SessionContent*)el->data; |
263 sc = (SessionContent*)el->data; |
263 sc2->name = sc->name; |
264 sc2->name = sc->name; |
264 sc->appfuncs->start(sc2); |
265 sc->appfuncs->start(sc2); |