r513 - trunk/librtmp/rtmp.c
Author: hyc Date: Sat Jun 19 20:57:38 2010 New Revision: 513 Log: Add ping/pong msg, from mybiiter@gmail.com. (Untested. Used with "ustream"?) Modified: trunk/librtmp/rtmp.c Modified: trunk/librtmp/rtmp.c ============================================================================== --- trunk/librtmp/rtmp.c Thu Jun 17 21:13:44 2010 (r512) +++ trunk/librtmp/rtmp.c Sat Jun 19 20:57:38 2010 (r513) @@ -1943,6 +1943,34 @@ SendCheckBWResult(RTMP *r, double txn) return RTMP_SendPacket(r, &packet, FALSE); } +SAVC(ping); +SAVC(pong); + +static int +SendPong(RTMP *r, double txn) +{ + RTMPPacket packet; + char pbuf[256], *pend = pbuf + sizeof(pbuf); + char *enc; + + packet.m_nChannel = 0x03; /* control channel (invoke) */ + packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; + packet.m_packetType = 0x14; /* INVOKE */ + packet.m_nTimeStamp = 0x16 * r->m_nBWCheckCounter; /* temp inc value. till we figure it out. */ + packet.m_nInfoField2 = 0; + packet.m_hasAbsTimestamp = 0; + packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; + + enc = packet.m_body; + enc = AMF_EncodeString(enc, pend, &av_pong); + enc = AMF_EncodeNumber(enc, pend, txn); + *enc++ = AMF_NULL; + + packet.m_nBodySize = enc - packet.m_body; + + return RTMP_SendPacket(r, &packet, FALSE); +} + SAVC(play); static int @@ -2335,6 +2363,10 @@ HandleInvoke(RTMP *r, const char *body, RTMP_Close(r); ret = 1; } + else if (AVMATCH(&method, &av_ping)) + { + SendPong(r, txn); + } else if (AVMATCH(&method, &av__onbwcheck)) { SendCheckBWResult(r, txn);
participants (1)
-
hyc