SAVC(description);
SAVC(secureToken);
SAVC(onStatus);
+SAVC(close);
static const AVal av_NetStream_Failed = AVC("NetStream.Failed");
static const AVal av_NetStream_Play_Failed = AVC("NetStream.Play.Failed");
static const AVal av_NetStream_Play_StreamNotFound =
static const AVal av_NetStream_Play_Complete = AVC("NetStream.Play.Complete");
static const AVal av_NetStream_Play_Stop = AVC("NetStream.Play.Stop");
+static const char *cst[] = { "client", "server" };
+
// Returns 0 for OK/Failed/error, 1 for 'Stop or Complete'
int
-ServeInvoke(STREAMING_SERVER *server, RTMPPacket *pack, const char *body)
+ServeInvoke(STREAMING_SERVER *server, int which, RTMPPacket *pack, const char *body)
{
int ret = 0, nRes;
int nBodySize = pack->m_nBodySize;
AMF_Dump(&obj);
AVal method;
AMFProp_GetString(AMF_GetProp(&obj, NULL, 0), &method);
- Log(LOGDEBUG, "%s, client invoking <%s>", __FUNCTION__, method.av_val);
+ Log(LOGDEBUG, "%s, %s invoking <%s>", __FUNCTION__, cst[which], method.av_val);
if (AVMATCH(&method, &av_connect))
{
else if (AVMATCH(&pname, &av_objectEncoding))
{
server->rc.m_fEncoding = cobj.o_props[i].p_vu.p_number;
+ server->rc.m_bSendEncoding = true;
}
/* Dup'd a string we didn't recognize? */
if (pval.av_val)
ret = 1;
}
}
+ else if (AVMATCH(&method, &av_close))
+ {
+ RTMP_Close(&server->rc);
+ ret = 1;
+ }
AMF_Reset(&obj);
return ret;
}
int
-ServePacket(STREAMING_SERVER *server, RTMPPacket *packet)
+ServePacket(STREAMING_SERVER *server, int which, RTMPPacket *packet)
{
int ret = 0;
obj.Dump(); */
- ret = ServeInvoke(server, packet, packet->m_body + 1);
+ ret = ServeInvoke(server, which, packet, packet->m_body + 1);
break;
}
case 0x12:
packet->m_nBodySize);
//LogHex(packet.m_body, packet.m_nBodySize);
- ret = ServeInvoke(server, packet, packet->m_body);
+ ret = ServeInvoke(server, which, packet, packet->m_body);
break;
case 0x16:
{
if (!RTMPPacket_IsReady(&ps))
continue;
- ServePacket(server, &ps);
+ ServePacket(server, 0, &ps);
RTMPPacket_Free(&ps);
if (RTMP_IsConnected(&server->rc))
break;
}
}
else if (!server->out && (ps.m_packetType == 0x11 || ps.m_packetType == 0x14))
- ServePacket(server, &ps);
+ ServePacket(server, 0, &ps);
RTMP_SendPacket(&server->rc, &ps, false);
RTMPPacket_Free(&ps);
break;
if (len > 0 && fwrite(buf, 1, len, server->out) != len)
goto cleanup;
}
- else if (server->out && (
- pc.m_packetType == 0x11 ||
- pc.m_packetType == 0x14))
+ else if ( pc.m_packetType == 0x11 || pc.m_packetType == 0x14)
{
- if (ServePacket(server, &pc))
+ if (ServePacket(server, 1, &pc) && server->out)
{
fclose(server->out);
server->out = NULL;