本文整理汇总了C++中RTMP_Log函数的典型用法代码示例。如果您正苦于以下问题:C++ RTMP_Log函数的具体用法?C++ RTMP_Log怎么用?C++ RTMP_Log使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RTMP_Log函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: serverThread
TFTYPE
serverThread(void *arg)
{
STREAMING_SERVER *server = arg;
server->state = STREAMING_ACCEPTING;
while (server->state == STREAMING_ACCEPTING)
{
struct sockaddr_in addr;
socklen_t addrlen = sizeof(struct sockaddr_in);
int sockfd =
accept(server->socket, (struct sockaddr *) &addr, &addrlen);
if (sockfd > 0)
{
// Create a new process and transfer the control to that
RTMP_Log(RTMP_LOGDEBUG, "%s: accepted connection from %s\n", __FUNCTION__,
inet_ntoa(addr.sin_addr));
processTCPrequest(server, sockfd);
RTMP_Log(RTMP_LOGDEBUG, "%s: processed request\n", __FUNCTION__);
}
else
{
RTMP_Log(RTMP_LOGERROR, "%s: accept failed", __FUNCTION__);
}
}
server->state = STREAMING_STOPPED;
TFRET();
}
示例2: RTMP_LogHex
void RTMP_LogHex(int level, const uint8_t *data, unsigned long len)
{
unsigned long i;
char line[50], *ptr;
if ( level > RTMP_debuglevel )
return;
ptr = line;
for(i=0; i<len; i++) {
*ptr++ = hexdig[0x0f & (data[i] >> 4)];
*ptr++ = hexdig[0x0f & data[i]];
if ((i & 0x0f) == 0x0f) {
*ptr = '\0';
ptr = line;
RTMP_Log(level, "%s", line);
} else {
*ptr++ = ' ';
}
}
if (i & 0x0f) {
*ptr = '\0';
RTMP_Log(level, "%s", line);
}
}
示例3: ExecuteRPCResult
int ExecuteRPCResult(RTMP *r, AMFObject *obj, YLENGStream *yle, int *redirected) {
AVal rpcKind;
AVal mediaxml;
char *playurl, *tvpayOnly;
AVal parsedHost = {NULL, 0};
AVal parsedPlaypath = {NULL, 0};
AVal parsedApp = {NULL, 0};
*redirected = FALSE;
AMFProp_GetString(AMF_GetProp(obj, NULL, 3), &rpcKind);
if (!AVMATCH(&rpcKind, &av_e0))
return TRUE;
AMFProp_GetString(AMF_GetProp(obj, NULL, 4), &mediaxml);
RTMP_Log(RTMP_LOGDEBUG, "clip data:\n%.*s", mediaxml.av_len, mediaxml.av_val);
playurl = GetXMLNodeContent(mediaxml.av_val, "url");
if (!playurl)
return FALSE;
if (!ParseYLEPlaypath(playurl, &parsedHost, &parsedApp, &parsedPlaypath)) {
RTMP_Log(RTMP_LOGERROR, "Couldn't parse stream url %s!", playurl);
free(playurl);
return FALSE;
}
// FIXME: old r->Link.playpath may be leaked
r->Link.playpath.av_len = parsedPlaypath.av_len;
r->Link.playpath.av_val = malloc(parsedPlaypath.av_len*sizeof(char));
strncpy(r->Link.playpath.av_val, parsedPlaypath.av_val, r->Link.playpath.av_len);
RTMP_Log(RTMP_LOGDEBUG, "New playpath : %.*s",
r->Link.playpath.av_len, r->Link.playpath.av_val);
if (!AVMATCH(&parsedHost, &r->Link.hostname)) {
RTMP_Log(RTMP_LOGDEBUG, "Redirected to another server: %.*s",
parsedHost.av_len, parsedHost.av_val);
// FIXME: old value may be leaked
r->Link.hostname.av_val = malloc(parsedHost.av_len*sizeof(char));
r->Link.hostname.av_len = parsedHost.av_len;
memcpy(r->Link.hostname.av_val, parsedHost.av_val, parsedHost.av_len);
*redirected = TRUE;
}
tvpayOnly = GetXMLNodeContent(mediaxml.av_val, "tvpayOnly");
if (tvpayOnly) {
yle->tvFeeRequired = (strcmp(tvpayOnly, "false")!=0);
free(tvpayOnly);
}
free(playurl);
return RTMP_SendCreateStream(r);
}
示例4: RTMP_LogHexString
void RTMP_LogHexString ( int level, const uint8_t *data, unsigned long len )
{
#define BP_OFFSET 9
#define BP_GRAPH 60
#define BP_LEN 80
char line[BP_LEN];
unsigned long i;
if ( !data || level > RTMP_debuglevel )
{
return;
}
/* in case len is zero */
line[0] = '\0';
for ( i = 0 ; i < len ; i++ )
{
int n = i % 16;
unsigned off;
if ( !n )
{
if ( i )
{
RTMP_Log ( level, "%s", line );
}
memset ( line, ' ', sizeof ( line ) - 2 );
line[sizeof ( line ) - 2] = '\0';
off = i % 0x0ffffU;
line[2] = hexdig[0x0f & ( off >> 12 )];
line[3] = hexdig[0x0f & ( off >> 8 )];
line[4] = hexdig[0x0f & ( off >> 4 )];
line[5] = hexdig[0x0f & off];
line[6] = ':';
}
off = BP_OFFSET + n * 3 + ( ( n >= 8 ) ? 1 : 0 );
line[off] = hexdig[0x0f & ( data[i] >> 4 )];
line[off + 1] = hexdig[0x0f & data[i]];
off = BP_GRAPH + n + ( ( n >= 8 ) ? 1 : 0 );
if ( isprint ( data[i] ) )
{
line[BP_GRAPH + n] = data[i];
}
else
{
line[BP_GRAPH + n] = '.';
}
}
RTMP_Log ( level, "%s", line );
}
示例5: RTMP_Log
void QRtmp::setSwfAge(int age)
{
if(age < 0)
RTMP_Log(RTMP_LOGERROR, "SWF Age must be non-negative, ignoring\n");
else
m_swfAge = age;
}
示例6: aval
void QRtmp::setConnData(const QByteArray &data)
{
m_connData = data;
AVal connData = aval(m_connData);
if(!RTMP_SetOpt(m_rtmp, &av_conn, &connData))
RTMP_Log(RTMP_LOGERROR, "Invalid AMF parameter");
}
示例7: startStreaming
STREAMING_SERVER *
startStreaming(const char *address, int port)
{
struct sockaddr_in addr;
int sockfd, tmp;
STREAMING_SERVER *server;
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockfd == -1)
{
RTMP_Log(RTMP_LOGERROR, "%s, couldn't create socket", __FUNCTION__);
return 0;
}
tmp = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
(char *)&tmp, sizeof(tmp));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(address); //htonl(INADDR_ANY);
addr.sin_port = htons(port);
if (bind(sockfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) ==
-1)
{
RTMP_Log(RTMP_LOGERROR, "%s, TCP bind failed for port number: %d", __FUNCTION__,
port);
return 0;
}
if (listen(sockfd, 10) == -1)
{
RTMP_Log(RTMP_LOGERROR, "%s, listen failed", __FUNCTION__);
closesocket(sockfd);
return 0;
}
server = (STREAMING_SERVER *)calloc(1, sizeof(STREAMING_SERVER));
server->socket = sockfd;
//ThreadCreate(serverThread, server);
std::thread theThread(serverThread, server);
theThread.join();
return server;
}
示例8: serverThread
TFTYPE
serverThread(void *arg)
{
STREAMING_SERVER *server = arg;
server->state = STREAMING_ACCEPTING;
while (server->state == STREAMING_ACCEPTING)
{
struct sockaddr_in addr;
socklen_t addrlen = sizeof(struct sockaddr_in);
int sockfd =
accept(server->socket, (struct sockaddr *) &addr, &addrlen);
if (sockfd > 0)
{
#ifdef linux
struct sockaddr_in dest;
char destch[16];
socklen_t destlen = sizeof(struct sockaddr_in);
getsockopt(sockfd, SOL_IP, SO_ORIGINAL_DST, &dest, &destlen);
strcpy(destch, inet_ntoa(dest.sin_addr));
RTMP_Log(RTMP_LOGDEBUG, "%s: accepted connection from %s to %s\n", __FUNCTION__,
inet_ntoa(addr.sin_addr), destch);
#else
RTMP_Log(RTMP_LOGDEBUG, "%s: accepted connection from %s\n", __FUNCTION__,
inet_ntoa(addr.sin_addr));
#endif
/* Create a new thread and transfer the control to that */
doServe(server, sockfd);
RTMP_Log(RTMP_LOGDEBUG, "%s: processed request\n", __FUNCTION__);
}
else
{
RTMP_Log(RTMP_LOGERROR, "%s: accept failed", __FUNCTION__);
}
}
server->state = STREAMING_STOPPED;
TFRET();
}
示例9: connect
void QRtmp::stopBlocking(int timeoutSec)
{
if(isRunning())
{
QEventLoop waiter;
connect(this, SIGNAL(finished()), &waiter, SLOT(quit()));
QTimer::singleShot(timeoutSec * 1000, &waiter, SLOT(quit()));
m_stop = true;
waiter.exec();
if(isRunning()) // timeout exceeded
RTMP_Log(RTMP_LOGWARNING, "Thread has not finished while timeout has exceeded");
}
}
示例10: ExecuteAuthenticationDetails
int ExecuteAuthenticationDetails(RTMP *r, AMFObject *proplist, YLENGStream *yle) {
long authResult = -1;
int i;
for (i=0; i<AMF_CountProp(proplist); i++) {
AVal name;
AMFObjectProperty *prop = AMF_GetProp(proplist, NULL, i);
AMFProp_GetName(prop, &name);
if (AVMATCH(&name, &av_locatedInBroadcastTerritory)) {
yle->locatedInBroadcastTerritory = AMFProp_GetBoolean(prop);
} else if (AVMATCH(&name, &av_randomAuth)) {
authResult = ((long)AMFProp_GetNumber(prop) + 447537687) % 6834253;
} else if (AVMATCH(&name, &av_tvFeeActivated)) {
yle->tvFeeActivated = AMFProp_GetBoolean(prop);
}
}
if (authResult != -1) {
RTMPPacket packet;
char pbuf[128], *pend = pbuf+sizeof(pbuf);
packet.m_nChannel = 0x03; // control channel
packet.m_headerType = RTMP_PACKET_SIZE_LARGE;
packet.m_packetType = 0x11; // FLEX MESSAGE
packet.m_nTimeStamp = RTMP_GetTime();
packet.m_nInfoField2 = 0;
packet.m_hasAbsTimestamp = 0;
packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE;
char *enc = packet.m_body;
*enc++ = 0x00; // Unknown
enc = AMF_EncodeString(enc, pend, &av_authenticateRandomNumber);
enc = AMF_EncodeNumber(enc, pend, 0);
*enc++ = AMF_NULL;
enc = AMF_EncodeNumber(enc, pend, (double)authResult);
packet.m_nBodySize = enc-packet.m_body;
RTMP_Log(RTMP_LOGDEBUG, "sending authenticateRandomNumber");
return RTMP_SendPacket(r, &packet, FALSE);
}
return FALSE;
}
示例11: RequestData
int RequestData(RTMP *r, YLENGStream *yle) {
RTMPPacket packet;
char pbuf[128], *pend = pbuf+sizeof(pbuf);
AVal clipID;
packet.m_nChannel = 0x03; // control channel
packet.m_headerType = RTMP_PACKET_SIZE_LARGE;
packet.m_packetType = 0x11; // FLEX MESSAGE
packet.m_nTimeStamp = RTMP_GetTime();
packet.m_nInfoField2 = 0;
packet.m_hasAbsTimestamp = 0;
packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE;
char *enc = packet.m_body;
*enc++ = 0x00; // Unknown
enc = AMF_EncodeString(enc, pend, &av_requestData);
enc = AMF_EncodeNumber(enc, pend, 0);
*enc++ = AMF_NULL;
enc = AMF_EncodeString(enc, pend, &av_e0);
if ((r->Link.lFlags & RTMP_LF_LIVE) != 0) {
char *tmp = malloc(yle->clipID.av_len+12);
strcpy(tmp, "streams/fi/");
strncat(tmp, yle->clipID.av_val, yle->clipID.av_len);
STR2AVAL(clipID, tmp);
enc = AMF_EncodeString(enc, pend, &clipID);
free(tmp);
} else {
char *tmp = malloc(yle->clipID.av_len+2);
strcpy(tmp, "/");
strncat(tmp, yle->clipID.av_val, yle->clipID.av_len);
STR2AVAL(clipID, tmp);
enc = AMF_EncodeString(enc, pend, &clipID);
free(tmp);
}
if (!enc) {
RTMP_Log(RTMP_LOGERROR, "Buffer too short in RequestData");
return FALSE;
}
packet.m_nBodySize = enc-packet.m_body;
return RTMP_SendPacket(r, &packet, FALSE);
}
示例12: ExecuteInvokedMethod
int ExecuteInvokedMethod(RTMP *r, const AVal *method, AMFObject *obj, void *ctx) {
struct YLENGStream *yle = (struct YLENGStream *)ctx;
int redirected = FALSE;
if (!yle || yle->yleAuth == 0)
return RTMP_CB_NOT_HANDLED;
if (AVMATCH(method, &av_authenticationDetails)) {
AMFObject list;
AMFProp_GetObject(AMF_GetProp(obj, NULL, 3), &list);
if (!ExecuteAuthenticationDetails(r, &list, yle))
return RTMP_CB_ERROR_STOP;
if (yle->clipID.av_len) {
if (!RequestData(r, yle))
return RTMP_CB_ERROR_STOP;
} else if (!RTMP_SendCreateStream(r)) {
return RTMP_CB_ERROR_STOP;
}
return RTMP_CB_SUCCESS;
} else if (AVMATCH(method, &av_randomNumberAuthenticated)) {
ExecuteRandomNumberAuthenticated(r);
return RTMP_CB_SUCCESS;
} else if (AVMATCH(method, &av_rpcResult)) {
if (!ExecuteRPCResult(r, obj, yle, &redirected))
return RTMP_CB_ERROR_STOP;
//if (redirected && !ConnectRedirected(r, r->Link.seekTime, yle))
// return RTMP_CB_ERROR_STOP;
return RTMP_CB_SUCCESS;
} else if (AVMATCH(method, &av_rpcError)) {
RTMP_Log(RTMP_LOGERROR, "RTMP server returned RPC error");
return RTMP_CB_ERROR_STOP;
}
return RTMP_CB_NOT_HANDLED;
}
示例13: stopStreaming
void
stopStreaming(STREAMING_SERVER * server)
{
assert(server);
if (server->state != STREAMING_STOPPED)
{
if (server->state == STREAMING_IN_PROGRESS)
{
server->state = STREAMING_STOPPING;
// wait for streaming threads to exit
while (server->state != STREAMING_STOPPED)
msleep(1);
}
if (closesocket(server->socket))
RTMP_Log(RTMP_LOGERROR, "%s: Failed to close listening socket, error %d",
GetSockError());
server->state = STREAMING_STOPPED;
}
}
示例14: HTTP_get
HTTPResult
HTTP_get(struct HTTP_ctx *http, const char *url, HTTP_read_callback *cb) {
char *host, *path;
char *p1, *p2;
char hbuf[256];
int port = 80;
#ifdef CRYPTO
int ssl = 0;
#endif
int hlen, flen = 0;
int rc, i;
int len_known;
HTTPResult ret = HTTPRES_OK;
struct sockaddr_in sa;
RTMPSockBuf sb = {0};
http->status = -1;
memset(&sa, 0, sizeof(struct sockaddr_in));
sa.sin_family = AF_INET;
/* we only handle http here */
if (strncasecmp(url, "http", 4))
return HTTPRES_BAD_REQUEST;
if (url[4] == 's') {
#ifdef CRYPTO
ssl = 1;
port = 443;
if (!RTMP_TLS_ctx)
RTMP_TLS_Init();
#else
return HTTPRES_BAD_REQUEST;
#endif
}
p1 = strchr(url + 4, ':');
if (!p1 || strncmp(p1, "://", 3))
return HTTPRES_BAD_REQUEST;
host = p1 + 3;
path = strchr(host, '/');
hlen = path - host;
strncpy(hbuf, host, hlen);
hbuf[hlen] = '\0';
host = hbuf;
p1 = strrchr(host, ':');
if (p1) {
*p1++ = '\0';
port = atoi(p1);
}
sa.sin_addr.s_addr = inet_addr(host);
if (sa.sin_addr.s_addr == INADDR_NONE) {
struct hostent *hp = gethostbyname(host);
if (!hp || !hp->h_addr)
return HTTPRES_LOST_CONNECTION;
sa.sin_addr = *(struct in_addr *) hp->h_addr;
}
sa.sin_port = htons(port);
sb.sb_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sb.sb_socket == -1)
return HTTPRES_LOST_CONNECTION;
i =
sprintf(sb.sb_buf,
"GET %s HTTP/1.0\r\nUser-Agent: %s\r\nHost: %s\r\nReferer: %.*s\r\n",
path, AGENT, host, (int) (path - url + 1), url);
if (http->date[0])
i += sprintf(sb.sb_buf + i, "If-Modified-Since: %s\r\n", http->date);
i += sprintf(sb.sb_buf + i, "\r\n");
if (connect
(sb.sb_socket, (struct sockaddr *) &sa, sizeof(struct sockaddr)) < 0) {
ret = HTTPRES_LOST_CONNECTION;
goto leave;
}
#ifdef CRYPTO
if (ssl) {
#ifdef NO_SSL
RTMP_Log(RTMP_LOGERROR, "%s, No SSL/TLS support", __FUNCTION__);
ret = HTTPRES_BAD_REQUEST;
goto leave;
#else
TLS_client(RTMP_TLS_ctx, sb.sb_ssl);
TLS_setfd(sb.sb_ssl, sb.sb_socket);
if (TLS_connect(sb.sb_ssl) < 0) {
RTMP_Log(RTMP_LOGERROR, "%s, TLS_Connect failed", __FUNCTION__);
ret = HTTPRES_LOST_CONNECTION;
goto leave;
}
#endif
}
#endif
RTMPSockBuf_Send(&sb, sb.sb_buf, i);
/* set timeout */
#define HTTP_TIMEOUT 5
{
SET_RCVTIMEO(tv, HTTP_TIMEOUT);
if (setsockopt
//.........这里部分代码省略.........
示例15: RTMP_HashSWF
//.........这里部分代码省略.........
for (i = 0; i < l; i += 2)
*ptr++ = (HEX2BIN(in[i]) << 4) | HEX2BIN(in[i + 1]);
got++;
}
else if (!strncmp(buf, "date: ", 6)) {
buf[strlen(buf) - 1] = '\0';
strncpy(date, buf + 6, sizeof(date));
got++;
}
else if (!strncmp(buf, "ctim: ", 6)) {
buf[strlen(buf) - 1] = '\0';
ctim = make_unix_time(buf + 6);
got++;
}
else if (!strncmp(buf, "url: ", 5))
break;
}
break;
}
break;
}
cnow = time(NULL);
/* If we got a cache time, see if it's young enough to use directly */
if (age && ctim > 0) {
ctim = cnow - ctim;
ctim /= 3600 * 24; /* seconds to days */
if (ctim < age) /* ok, it's new enough */
goto out;
}
in.first = 1;
HMAC_setup(in.ctx, "Genuine Adobe Flash Player 001", 30);
inflateInit(&zs);
in.zs = &zs;
http.date = date;
http.data = ∈
httpres = HTTP_get(&http, url, swfcrunch);
inflateEnd(&zs);
if (httpres != HTTPRES_OK && httpres != HTTPRES_OK_NOT_MODIFIED) {
ret = -1;
if (httpres == HTTPRES_LOST_CONNECTION)
RTMP_Log(RTMP_LOGERROR, "%s: connection lost while downloading swfurl %s",
__FUNCTION__, url);
else if (httpres == HTTPRES_NOT_FOUND)
RTMP_Log(RTMP_LOGERROR, "%s: swfurl %s not found", __FUNCTION__, url);
else
RTMP_Log(RTMP_LOGERROR, "%s: couldn't contact swfurl %s (HTTP error %d)",
__FUNCTION__, url, http.status);
}
else {
if (got && pos)
fseek(f, pos, SEEK_SET);
else {
char *q;
if (!f)
f = fopen(path, "w");
if (!f) {
int err = errno;
RTMP_Log(RTMP_LOGERROR,
"%s: couldn't open %s for writing, errno %d (%s)",
__FUNCTION__, path, err, strerror(err));
ret = -1;
goto out;
}
fseek(f, 0, SEEK_END);
q = strchr(url, '?');
if (q)
i = q - url;
else
i = strlen(url);
fprintf(f, "url: %.*s\n", i, url);
}
strtime(&cnow, cctim);
fprintf(f, "ctim: %s\n", cctim);
if (!in.first) {
HMAC_finish(in.ctx, hash, hlen);
*size = in.size;
fprintf(f, "date: %s\n", date);
fprintf(f, "size: %08x\n", in.size);
fprintf(f, "hash: ");
for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
fprintf(f, "%02x", hash[i]);
fprintf(f, "\n");
}
}
HMAC_close(in.ctx);
out:
free(path);
if (f)
fclose(f);
return ret;
}