Lines Matching +full:- +full:av
3 * Copyright (C) 2009-2011 Howard Chu
18 * Boston, MA 02110-1301, USA.
131 #define STR2AVAL(av,str) av.av_val = str; av.av_len = strlen(av.av_val) argument
179 AVal av; in SendConnectResult() local
194 STR2AVAL(av, "FMS/3,5,1,525"); in SendConnectResult()
195 enc = AMF_EncodeNamedString(enc, pend, &av_fmsVer, &av); in SendConnectResult()
204 STR2AVAL(av, "status"); in SendConnectResult()
205 enc = AMF_EncodeNamedString(enc, pend, &av_level, &av); in SendConnectResult()
206 STR2AVAL(av, "NetConnection.Connect.Success"); in SendConnectResult()
207 enc = AMF_EncodeNamedString(enc, pend, &av_code, &av); in SendConnectResult()
208 STR2AVAL(av, "Connection succeeded."); in SendConnectResult()
209 enc = AMF_EncodeNamedString(enc, pend, &av_description, &av); in SendConnectResult()
210 enc = AMF_EncodeNamedNumber(enc, pend, &av_objectEncoding, r->m_fEncoding); in SendConnectResult()
212 STR2AVAL(av, "58656322c972d6cdf2d776167575045f8484ea888e31c086f7b5ffbd0baec55ce442c2fb"); in SendConnectResult()
213 enc = AMF_EncodeNamedString(enc, pend, &av_secureToken, &av); in SendConnectResult()
228 packet.m_nBodySize = enc - packet.m_body; in SendConnectResult()
253 packet.m_nBodySize = enc - packet.m_body; in SendResultNumber()
290 enc = AMF_EncodeNamedString(enc, pend, &av_details, &r->Link.playpath); in SendPlayStart()
296 packet.m_nBodySize = enc - packet.m_body; in SendPlayStart()
322 enc = AMF_EncodeNamedString(enc, pend, &av_details, &r->Link.playpath); in SendPlayStop()
328 packet.m_nBodySize = enc - packet.m_body; in SendPlayStop()
333 spawn_dumper(int argc, AVal *av, char *cmd) in spawn_dumper() argument
348 while (waitpid(-1, NULL, WNOHANG) > 0); in spawn_dumper()
355 argv[i] = av[i].av_val; in spawn_dumper()
356 argv[i][av[i].av_len] = '\0'; in spawn_dumper()
370 for (i=0, len=0; i < obj->o_num; i++) in countAMF()
372 AMFObjectProperty *p = &obj->o_props[i]; in countAMF()
375 if (p->p_name.av_val) in countAMF()
378 if (p->p_name.av_val) in countAMF()
379 len += p->p_name.av_len + 1; in countAMF()
380 switch(p->p_type) in countAMF()
386 len += p->p_vu.p_aval.av_len; in countAMF()
393 len += countAMF(&p->p_vu.p_object, argc); in countAMF()
410 for (i=0; i < obj->o_num; i++) in dumpAMF()
412 AMFObjectProperty *p = &obj->o_props[i]; in dumpAMF()
415 ptr += sprintf(ptr, " -C "); in dumpAMF()
417 if (p->p_name.av_val) in dumpAMF()
419 *ptr++ = opt[p->p_type]; in dumpAMF()
421 if (p->p_name.av_val) in dumpAMF()
422 ptr += sprintf(ptr, "%.*s:", p->p_name.av_len, p->p_name.av_val); in dumpAMF()
423 switch(p->p_type) in dumpAMF()
426 *ptr++ = p->p_vu.p_number != 0 ? '1' : '0'; in dumpAMF()
427 argv[ac].av_len = ptr - argv[ac].av_val; in dumpAMF()
430 memcpy(ptr, p->p_vu.p_aval.av_val, p->p_vu.p_aval.av_len); in dumpAMF()
431 ptr += p->p_vu.p_aval.av_len; in dumpAMF()
432 argv[ac].av_len = ptr - argv[ac].av_val; in dumpAMF()
435 ptr += sprintf(ptr, "%f", p->p_vu.p_number); in dumpAMF()
436 argv[ac].av_len = ptr - argv[ac].av_val; in dumpAMF()
440 argv[ac].av_len = ptr - argv[ac].av_val; in dumpAMF()
443 ptr = dumpAMF(&p->p_vu.p_object, ptr, argv, argc); in dumpAMF()
449 ptr += sprintf(ptr, " -C O:0"); in dumpAMF()
453 argv[ac].av_len = ptr - argv[ac].av_val; in dumpAMF()
470 body = packet->m_body + offset; in ServeInvoke()
471 nBodySize = packet->m_nBodySize - offset; in ServeInvoke()
500 server->connect = packet->m_body; in ServeInvoke()
501 packet->m_body = NULL; in ServeInvoke()
513 r->Link.app = pval; in ServeInvoke()
515 if (!r->Link.app.av_val) in ServeInvoke()
516 r->Link.app.av_val = ""; in ServeInvoke()
517 server->arglen += 6 + pval.av_len; in ServeInvoke()
518 server->argc += 2; in ServeInvoke()
522 r->Link.flashVer = pval; in ServeInvoke()
524 server->arglen += 6 + pval.av_len; in ServeInvoke()
525 server->argc += 2; in ServeInvoke()
529 r->Link.swfUrl = pval; in ServeInvoke()
531 server->arglen += 6 + pval.av_len; in ServeInvoke()
532 server->argc += 2; in ServeInvoke()
536 r->Link.tcUrl = pval; in ServeInvoke()
538 server->arglen += 6 + pval.av_len; in ServeInvoke()
539 server->argc += 2; in ServeInvoke()
543 r->Link.pageUrl = pval; in ServeInvoke()
545 server->arglen += 6 + pval.av_len; in ServeInvoke()
546 server->argc += 2; in ServeInvoke()
550 r->m_fAudioCodecs = cobj.o_props[i].p_vu.p_number; in ServeInvoke()
554 r->m_fVideoCodecs = cobj.o_props[i].p_vu.p_number; in ServeInvoke()
558 r->m_fEncoding = cobj.o_props[i].p_vu.p_number; in ServeInvoke()
564 int i = obj.o_num - 3; in ServeInvoke()
565 r->Link.extras.o_num = i; in ServeInvoke()
566 r->Link.extras.o_props = malloc(i*sizeof(AMFObjectProperty)); in ServeInvoke()
567 memcpy(r->Link.extras.o_props, obj.o_props+3, i*sizeof(AMFObjectProperty)); in ServeInvoke()
569 server->arglen += countAMF(&r->Link.extras, &server->argc); in ServeInvoke()
575 SendResultNumber(r, txn, ++server->streamID); in ServeInvoke()
586 server->arglen += 6 + usherToken.av_len; in ServeInvoke()
587 server->argc += 2; in ServeInvoke()
588 r->Link.usherToken = usherToken; in ServeInvoke()
593 AVal *argv, av; in ServeInvoke() local
597 AMFProp_GetString(AMF_GetProp(&obj, NULL, 3), &r->Link.playpath); in ServeInvoke()
598 if (!r->Link.playpath.av_len) in ServeInvoke()
601 r->Link.seekTime = AMFProp_GetNumber(AMF_GetProp(&obj, NULL, 4)); in ServeInvoke()
603 r->Link.length = AMFProp_GetNumber(AMF_GetProp(&obj, NULL, 5)); in ServeInvoke()
605 if (r->Link.tcUrl.av_len) in ServeInvoke()
607 len = server->arglen + r->Link.playpath.av_len + 4 + in ServeInvoke()
608 sizeof("rtmpdump") + r->Link.playpath.av_len + 12; in ServeInvoke()
609 server->argc += 5; in ServeInvoke()
611 cmd = malloc(len + server->argc * sizeof(AVal)); in ServeInvoke()
615 argv[0].av_len = sizeof("rtmpdump")-1; in ServeInvoke()
622 ptr += sprintf(ptr," -r \"%s\"", r->Link.tcUrl.av_val); in ServeInvoke()
623 argv[argc++].av_len = r->Link.tcUrl.av_len; in ServeInvoke()
625 if (r->Link.app.av_val) in ServeInvoke()
630 ptr += sprintf(ptr, " -a \"%s\"", r->Link.app.av_val); in ServeInvoke()
631 argv[argc++].av_len = r->Link.app.av_len; in ServeInvoke()
633 if (r->Link.flashVer.av_val) in ServeInvoke()
638 ptr += sprintf(ptr, " -f \"%s\"", r->Link.flashVer.av_val); in ServeInvoke()
639 argv[argc++].av_len = r->Link.flashVer.av_len; in ServeInvoke()
641 if (r->Link.swfUrl.av_val) in ServeInvoke()
646 ptr += sprintf(ptr, " -W \"%s\"", r->Link.swfUrl.av_val); in ServeInvoke()
647 argv[argc++].av_len = r->Link.swfUrl.av_len; in ServeInvoke()
649 if (r->Link.pageUrl.av_val) in ServeInvoke()
654 ptr += sprintf(ptr, " -p \"%s\"", r->Link.pageUrl.av_val); in ServeInvoke()
655 argv[argc++].av_len = r->Link.pageUrl.av_len; in ServeInvoke()
657 if (r->Link.usherToken.av_val) in ServeInvoke()
662 ptr += sprintf(ptr, " -j \"%s\"", r->Link.usherToken.av_val); in ServeInvoke()
663 argv[argc++].av_len = r->Link.usherToken.av_len; in ServeInvoke()
664 free(r->Link.usherToken.av_val); in ServeInvoke()
665 r->Link.usherToken.av_val = NULL; in ServeInvoke()
666 r->Link.usherToken.av_len = 0; in ServeInvoke()
668 if (r->Link.extras.o_num) { in ServeInvoke()
669 ptr = dumpAMF(&r->Link.extras, ptr, argv, &argc); in ServeInvoke()
670 AMF_Reset(&r->Link.extras); in ServeInvoke()
675 ptr += sprintf(ptr, " -y \"%.*s\"", in ServeInvoke()
676 r->Link.playpath.av_len, r->Link.playpath.av_val); in ServeInvoke()
677 argv[argc++].av_len = r->Link.playpath.av_len; in ServeInvoke()
679 av = r->Link.playpath; in ServeInvoke()
681 q = memchr(av.av_val, '?', av.av_len); in ServeInvoke()
684 if (q == av.av_val) in ServeInvoke()
686 av.av_val++; in ServeInvoke()
687 av.av_len--; in ServeInvoke()
691 av.av_len = q - av.av_val; in ServeInvoke()
695 for (p=av.av_val+av.av_len-1; p>=av.av_val; p--) in ServeInvoke()
699 av.av_len -= p - av.av_val; in ServeInvoke()
700 av.av_val = p; in ServeInvoke()
704 if (av.av_val[0] == '.') in ServeInvoke()
706 av.av_val++; in ServeInvoke()
707 av.av_len--; in ServeInvoke()
709 file = malloc(av.av_len+5); in ServeInvoke()
711 memcpy(file, av.av_val, av.av_len); in ServeInvoke()
712 file[av.av_len] = '\0'; in ServeInvoke()
718 if (file[av.av_len - 4] != '.') in ServeInvoke()
720 av.av_len += 4; in ServeInvoke()
723 if (strcmp(file+av.av_len-4, ".flv")) in ServeInvoke()
725 strcpy(file+av.av_len-4, ".flv"); in ServeInvoke()
730 argv[argc].av_len = av.av_len; in ServeInvoke()
731 ptr += sprintf(ptr, " -o %s", file); in ServeInvoke()
733 if (now - server->filetime < DUPTIME && AVMATCH(&argv[argc], &server->filename)) in ServeInvoke()
742 server->filetime = now; in ServeInvoke()
743 free(server->filename.av_val); in ServeInvoke()
744 server->filename = argv[argc++]; in ServeInvoke()
750 pc.m_body = server->connect; in ServeInvoke()
751 server->connect = NULL; in ServeInvoke()
769 packet->m_packetType, packet->m_nBodySize); in ServePacket()
771 switch (packet->m_packetType) in ServePacket()
809 __FUNCTION__, packet->m_nBodySize); in ServePacket()
814 int nRes = obj.Decode(packet.m_body+1, packet.m_nBodySize-1); in ServePacket()
834 packet->m_nBodySize); in ServePacket()
845 packet->m_packetType); in ServePacket()
847 RTMP_LogHex(RTMP_LOGDEBUG, packet->m_body, packet->m_nBodySize); in ServePacket()
879 server->state = STREAMING_IN_PROGRESS; in doServe()
902 rtmp->m_sb.sb_socket = sockfd; in doServe()
914 server->arglen = 0; in doServe()
927 rtmp->Link.playpath.av_val = NULL; in doServe()
928 rtmp->Link.tcUrl.av_val = NULL; in doServe()
929 rtmp->Link.swfUrl.av_val = NULL; in doServe()
930 rtmp->Link.pageUrl.av_val = NULL; in doServe()
931 rtmp->Link.app.av_val = NULL; in doServe()
932 rtmp->Link.flashVer.av_val = NULL; in doServe()
933 if (rtmp->Link.usherToken.av_val) in doServe()
935 free(rtmp->Link.usherToken.av_val); in doServe()
936 rtmp->Link.usherToken.av_val = NULL; in doServe()
942 if (server->state == STREAMING_IN_PROGRESS) in doServe()
943 server->state = STREAMING_ACCEPTING; in doServe()
952 server->state = STREAMING_ACCEPTING; in serverThread()
954 while (server->state == STREAMING_ACCEPTING) in serverThread()
959 accept(server->socket, (struct sockaddr *) &addr, &addrlen); in serverThread()
984 server->state = STREAMING_STOPPED; in serverThread()
996 if (sockfd == -1) in startStreaming()
1011 -1) in startStreaming()
1018 if (listen(sockfd, 10) == -1) in startStreaming()
1026 server->socket = sockfd; in startStreaming()
1038 if (server->state != STREAMING_STOPPED) in stopStreaming()
1040 if (server->state == STREAMING_IN_PROGRESS) in stopStreaming()
1042 server->state = STREAMING_STOPPING; in stopStreaming()
1045 while (server->state != STREAMING_STOPPED) in stopStreaming()
1049 if (closesocket(server->socket)) in stopStreaming()
1053 server->state = STREAMING_STOPPED; in stopStreaming()
1088 if (!strcmp(argv[i], "-z")) in main()
1090 else if (!strcmp(argv[i], "-c") && i + 1 < argc) in main()
1092 else if (!strcmp(argv[i], "-k") && i + 1 < argc) in main()
1102 defaultRTMPRequest.rtmpport = -1; in main()
1135 while (rtmpServer->state != STREAMING_STOPPED) in main()
1158 char *srcbeg = src->av_val; in AVreplace()
1159 char *srcend = src->av_val + src->av_len; in AVreplace()
1164 sptr = src->av_val; in AVreplace()
1165 while (sptr < srcend && (sptr = strstr(sptr, orig->av_val))) in AVreplace()
1168 sptr += orig->av_len; in AVreplace()
1173 dest = malloc(src->av_len + 1 + (repl->av_len - orig->av_len) * n); in AVreplace()
1175 sptr = src->av_val; in AVreplace()
1177 while (sptr < srcend && (sptr = strstr(sptr, orig->av_val))) in AVreplace()
1179 n = sptr - srcbeg; in AVreplace()
1182 memcpy(dptr, repl->av_val, repl->av_len); in AVreplace()
1183 dptr += repl->av_len; in AVreplace()
1184 sptr += orig->av_len; in AVreplace()
1187 n = srcend - srcbeg; in AVreplace()
1191 src->av_val = dest; in AVreplace()
1192 src->av_len = dptr - dest; in AVreplace()