jingle/action-handlers.c
changeset 156 653fa009fea3
parent 148 cb40539b88b7
child 158 a068e5714120
equal deleted inserted replaced
155:35e603b584a3 156:653fa009fea3
   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);