亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? binarycomms.c

?? linux下的dvb收看解析軟件代碼; 帶參考程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/*Copyright (C) 2006  Adam CharrettThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USAbinarycomms.cBinary Communications protocol for control DVBStreamer.*/#include "config.h"#include <limits.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <unistd.h>#include <sys/types.h>#include <sys/poll.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include "ts.h"#include "udpoutput.h"#include "outputs.h"#include "logging.h"#include "cache.h"#include "messages.h"#include "main.h"#include "binarycomms.h"#define MAX_CONNECTIONS 2 /* 1 for monitoring by web and another for control */#define LOG_MALFORMED(_connection, _field) \    printlog(LOG_DEBUG, "%s:%d : Malformed message, not enough data in message to read %s field!\n", \        inet_ntoa((_connection)->clientAddress.sin_addr), (_connection)->clientAddress.sin_port, _field)#define IFAUTHENTICATED(_dofunc, _connection, _message) \    do { \        if ((_connection)->authenticated)\        {\            _dofunc(_connection, _message);\        }\        else \        { \          MessageRERR(_message, RERR_NOTAUTHORISED, "Not authorised!"); \        }\    }while(0)#define MessageRERR(_msg, _errcode, _str) \    do{\        MessageInit(_msg, MSGCODE_RERR);\        MessageEncode(_msg, "bs", _errcode, _str);\    }while(0)#define STRINGIFY(x) #x#define TOSTRING(x) STRINGIFY(x)#define READSTRING(_var)\    do { \        if (MessageReadString(message, &_var))\        {\            LOG_MALFORMED(connection, TOSTRING(_var));\            connection->connected = FALSE;\            return ;\        }\    }while(0)#define READ2STRINGS(_var1, _var2)\    do { \        if (MessageReadString(message, &_var1))\        {\            LOG_MALFORMED(connection, TOSTRING(_var1));\            connection->connected = FALSE;\            return ;\        }\        if (MessageReadString(message, &_var2))\        {\            LOG_MALFORMED(connection, TOSTRING(_var2));\            connection->connected = FALSE;\            free(_var1);\            return ;\        }\    }while(0)#define READUINT8(_var)\    do { \        if (MessageReadUint8(message, &_var))\        {\            LOG_MALFORMED(connection, TOSTRING(_var));\            connection->connected = FALSE;\            return ;\        }\    }while(0)#define READUINT16(_var)\    do { \        if (MessageReadUint16(message, &_var))\        {\            LOG_MALFORMED(connection, TOSTRING(_var));\            connection->connected = FALSE;\            return ;\        }\    }while(0)#define READUINT32(_var)\    do { \        if (MessageReadUint32(message, &_var))\        {\            LOG_MALFORMED(connection, TOSTRING(_var));\            connection->connected = FALSE;\            return ;\        }\    }while(0)typedef struct Connection_t{    int socketfd;    struct sockaddr_in clientAddress;    bool authenticated;    bool active;    bool connected;    pthread_t thread;    Message_t message;}Connection_t;static void HandleConnection(Connection_t *connection);static void ProcessMessage(Connection_t *connection, Message_t *message);static void ProcessInfo(Connection_t *connection, Message_t *message);static void ProcessAuth(Connection_t *connection, Message_t *message);static void ProcessPrimaryServiceSelect(Connection_t *connection, Message_t *message);static void ProcessSecondaryServiceAdd(Connection_t *connection, Message_t *message);static void ProcessSecondaryServiceSet(Connection_t *connection, Message_t *message);static void ProcessSecondaryServiceRemove(Connection_t *connection, Message_t *message);static void ProcessOutputAdd(Connection_t *connection, Message_t *message);static void ProcessOutputRemove(Connection_t *connection, Message_t *message);static void ProcessOutputPIDAdd(Connection_t *connection, Message_t *message);static void ProcessOutputPIDRemove(Connection_t *connection, Message_t *message);static void ProcessPrimaryServiceCurrent(Connection_t *connection, Message_t *message);static void ProcessSecondaryServiceList(Connection_t *connection, Message_t *message);static void ProcessOutputsList(Connection_t *connection, Message_t *message);static void ProcessOutputListPids(Connection_t *connection, Message_t *message);static void ProcessServiceFilterPacketCount(Connection_t *connection, Message_t *message);static void ProcessOutputPacketCount(Connection_t *connection, Message_t *message);static void ProcessTSStats(Connection_t *connection, Message_t *message);static void ProcessFEStatus(Connection_t *connection, Message_t *message);static void ProcessServiceList(Connection_t *connection, Message_t *message, int all);static void ProcessServicePids(Connection_t *connection, Message_t *message);static int activeConnections = 0;static pthread_mutex_t activeConnectionsMutex = PTHREAD_MUTEX_INITIALIZER;static int serverSocket;static Connection_t connections[MAX_CONNECTIONS];static char *infoStreamerName;static char *authUsername;static char *authPassword;static time_t serverStartTime;int BinaryCommsInit(int adapter, char *streamername, char *username, char *password){    struct sockaddr_in serverAddress;    serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    if (serverSocket < 0)    {        printlog(LOG_ERROR, "Failed to create server socket!\n");        return 1;    }    bzero((char *) &serverAddress, sizeof(serverAddress));    serverAddress.sin_family = AF_INET;    serverAddress.sin_addr.s_addr = INADDR_ANY;    serverAddress.sin_port = htons(BINARYCOMMS_PORT + adapter);    if (bind(serverSocket, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) < 0)    {        printlog(LOG_ERROR, "Failed to bind server to port %d", BINARYCOMMS_PORT + adapter);        close(serverSocket);        return 1;    }    listen(serverSocket, 1);    infoStreamerName = strdup(streamername);    authUsername = strdup(username);    authPassword = strdup(password);    time(&serverStartTime);    printlog(LOG_INFO, "Server created %s", ctime(&serverStartTime));    printlog(LOG_DEBUG, "Username    : %s\n", authUsername);    printlog(LOG_DEBUG, "Password    : %s\n", authPassword);    printlog(LOG_DEBUG, "Server Name : %s\n", infoStreamerName);    return 0;}void BinaryCommsDeInit(void){    int i;    close(serverSocket);    for ( i = 0; i < MAX_CONNECTIONS; i ++)    {        if (connections[i].connected)        {            /* Force closure of the sockets should cause the thread to terminate. */            close(connections[i].socketfd);            connections[i].connected = FALSE;        }    }}void BinaryCommsAcceptConnections(void){    struct pollfd pfd[1];    pfd[0].fd = serverSocket;    pfd[0].events = POLLIN;    while (!ExitProgram)    {        if (poll(pfd, 1, 200))        {            if (pfd[0].revents & POLLIN)            {                int clientfd;                struct sockaddr_in clientAddress;                int clientAddressSize;                clientAddressSize = sizeof(clientAddress);                clientfd = accept(serverSocket, (struct sockaddr *) & clientAddress, &clientAddressSize);                pthread_mutex_lock(&activeConnectionsMutex);                if (activeConnections >= MAX_CONNECTIONS)                {                    printlog(LOG_INFO, "Connection attempt from %s:%d rejected as too many open connections!\n",                             inet_ntoa(clientAddress.sin_addr), clientAddress.sin_port);                    close(clientfd);                }                else                {                    int found = -1;                    int i;                    for (i = 0; i < MAX_CONNECTIONS; i ++)                    {                        if (!connections[i].active)                        {                            found = i;                            break;                        }                    }                    if (found >= 0)                    {                        connections[i].active = TRUE;                        connections[i].connected = TRUE;                        connections[i].socketfd = clientfd;                        connections[i].clientAddress = clientAddress;                        activeConnections ++;                        printlog(LOG_INFO, "Connection attempt from %s:%d accepted!\n",                                 inet_ntoa(clientAddress.sin_addr), clientAddress.sin_port);                        pthread_create(&connections[i].thread, NULL, (void*)HandleConnection, (void*)&connections[i]);                    }                    else                    {                        printlog(LOG_INFO, "Connection attempt from %s:%d rejected as no connections structures left!\n",                                 inet_ntoa(clientAddress.sin_addr), clientAddress.sin_port);                        close(clientfd);                    }                }                pthread_mutex_unlock(&activeConnectionsMutex);            }        }    }}static void HandleConnection(Connection_t *connection){    struct pollfd pfd[1];    int socketfd = connection->socketfd;    pfd[0].fd = socketfd;    pfd[0].events = POLLIN;    Message_t *message = &connection->message;    while (!ExitProgram && connection->connected)    {        if (MessageRecv(message, socketfd))        {            /* Socket must be dead exit this connection! */            break;        }        ProcessMessage(connection, message);        if (connection->connected)        {            printlog(LOG_DEBUG, "%s:%d : Response 0x%04x length %d\n",                     inet_ntoa(connection->clientAddress.sin_addr), connection->clientAddress.sin_port,                     MessageGetCode(message), MessageGetLength(message));            if (MessageSend(message, socketfd))            {                /* Socket must be dead exit this connection! */                break;            }        }    }    printlog(LOG_INFO, "%s:%d : Connection closed!\n",             inet_ntoa(connection->clientAddress.sin_addr), connection->clientAddress.sin_port);    /* Close the socket and free our resources */    close(socketfd);    connection->connected = FALSE;    pthread_mutex_lock(&activeConnectionsMutex);    connection->active = FALSE;    activeConnections --;    pthread_mutex_unlock(&activeConnectionsMutex);}static void ProcessMessage(Connection_t *connection, Message_t *message){    printlog(LOG_DEBUG, "%s:%d : Processing message 0x%04x length %d\n",             inet_ntoa(connection->clientAddress.sin_addr), connection->clientAddress.sin_port,             MessageGetCode(message), MessageGetLength(message));    switch (message->code)    {        case MSGCODE_INFO:            ProcessInfo(connection, message);            break;        case MSGCODE_AUTH:            ProcessAuth(connection, message);            break;            /* Control Messages */        case MSGCODE_CSPS:            IFAUTHENTICATED(ProcessPrimaryServiceSelect, connection, message);            break;        case MSGCODE_CSSA:            IFAUTHENTICATED(ProcessSecondaryServiceAdd, connection, message);            break;        case MSGCODE_CSSS:            IFAUTHENTICATED(ProcessSecondaryServiceSet, connection, message);            break;        case MSGCODE_CSSR:            IFAUTHENTICATED(ProcessSecondaryServiceRemove, connection, message);            break;        case MSGCODE_COAO:            IFAUTHENTICATED(ProcessOutputAdd, connection, message);            break;        case MSGCODE_CORO:            IFAUTHENTICATED(ProcessOutputRemove, connection, message);            break;        case MSGCODE_COAP:            IFAUTHENTICATED(ProcessOutputPIDAdd, connection, message);            break;        case MSGCODE_CORP:            IFAUTHENTICATED(ProcessOutputPIDRemove, connection, message);            break;            /* Status Messages */        case MSGCODE_SSPS:            ProcessPrimaryServiceCurrent(connection, message);            break;        case MSGCODE_SSFL:            ProcessSecondaryServiceList(connection, message);            break;        case MSGCODE_SSPC:            ProcessServiceFilterPacketCount(connection, message);            break;        case MSGCODE_SOLO:            ProcessOutputsList(connection, message);            break;        case MSGCODE_SOLP:            ProcessOutputListPids(connection, message);            break;        case MSGCODE_SOPC:            ProcessOutputPacketCount(connection, message);            break;        case MSGCODE_STSS:            ProcessTSStats(connection, message);            break;        case MSGCODE_SFES:            ProcessFEStatus(connection, message);            break;        case MSGCODE_SSLA:            ProcessServiceList(connection, message, 1);            break;        case MSGCODE_SSLM:            ProcessServiceList(connection, message, 0);            break;        case MSGCODE_SSPL:            ProcessServicePids(connection, message);            break;        default:            MessageRERR(message, RERR_GENERIC, "Unknown message type!");            break;    }}static void ProcessInfo(Connection_t *connection, Message_t *message){    uint8_t info;    READUINT8(info);    switch (info)    {        case INFO_NAME:            MessageRERR(message, RERR_OK, infoStreamerName);            break;        case INFO_FETYPE:            MessageRERR(message, RERR_OK, "Not implemented!");            break;        case INFO_AUTHENTICATED:            MessageRERR(message, RERR_OK, connection->authenticated ? "Authenticated" : "Not authenticated");            break;        case INFO_UPSECS:            {                char buffer[11];                time_t now;                time(&now);                sprintf(buffer, "%d", (int)difftime(now, serverStartTime));                MessageRERR(message, RERR_OK, buffer);            }            break;        case INFO_UPTIME:            {                char buffer[50];                time_t now;                int seconds;                int d, h, m, s;                time(&now);                seconds = (int)difftime(now, serverStartTime);                d = seconds / (24 * 60 * 60);                h = (seconds - (d * 24 * 60 * 60)) / (60 * 60);                m = (seconds - ((d * 24 * 60 * 60) + (h * 60 * 60))) / 60;                s = (seconds - ((d * 24 * 60 * 60) + (h * 60 * 60) + (m * 60)));                sprintf(buffer, "%d Days %d Hours %d Minutes %d seconds", d, h, m, s);                MessageRERR(message, RERR_OK, buffer);            }            break;        default:            MessageRERR(message, RERR_GENERIC, "Unknown field");            break;    }}static void ProcessAuth(Connection_t *connection, Message_t *message){    char *msgUsername = NULL;    char *msgPassword = NULL;    READ2STRINGS(msgUsername, msgPassword);    connection->authenticated = (strcmp(msgUsername, authUsername) == 0) &&                                (strcmp(msgPassword, authPassword) == 0);    MessageRERR(message, connection->authenticated ? RERR_OK : RERR_NOTAUTHORISED, NULL);    free(msgUsername);    free(msgPassword);}static void ProcessPrimaryServiceSelect(Connection_t *connection, Message_t *message){    char *serviceName;    READSTRING(serviceName);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡一区在线观看| 懂色av一区二区三区免费观看| 亚洲激情在线激情| 亚洲综合色网站| 午夜精品久久久久久久蜜桃app| 亚洲国产成人tv| 一区二区日韩av| 日韩电影在线一区| 国产综合色在线视频区| 国产99精品视频| 欧美午夜在线一二页| 69堂亚洲精品首页| 久久久久久久网| 亚洲黄色片在线观看| 久久精品国产网站| 91片在线免费观看| 欧美麻豆精品久久久久久| 色综合天天综合在线视频| 成人美女在线观看| 国产美女在线观看一区| 日韩中文欧美在线| 成人美女在线视频| 国产激情精品久久久第一区二区 | 日本特黄久久久高潮| 日韩电影在线免费| 国产在线看一区| www.欧美日韩国产在线| 在线观看视频91| 91精品国产一区二区三区蜜臀| 日韩免费观看2025年上映的电影 | 最新成人av在线| 亚洲国产另类av| 精品一区二区三区视频| 成人av免费在线播放| 欧美午夜不卡视频| 欧美精品一区二区久久久| 国产精品美女一区二区三区| 亚洲国产婷婷综合在线精品| 久久99久久久久| 99热99精品| 日韩一区二区视频在线观看| 国产女人18毛片水真多成人如厕 | 亚洲国产高清在线观看视频| 亚洲一区二区三区视频在线播放| 美女一区二区三区| 91在线视频观看| 欧美r级在线观看| 亚洲精品乱码久久久久久久久| 人人精品人人爱| 色94色欧美sute亚洲线路一ni | 久久蜜桃av一区二区天堂| 最新国产の精品合集bt伙计| 久久国产日韩欧美精品| 91亚洲国产成人精品一区二三 | 亚洲最色的网站| 国产美女久久久久| 欧美日韩精品免费观看视频| 久久精品这里都是精品| 香蕉成人啪国产精品视频综合网| 国产成人精品一区二区三区四区 | 久久se精品一区精品二区| 日本久久电影网| 久久精品一区二区三区不卡牛牛| 亚洲午夜精品在线| 99久久精品国产麻豆演员表| 日韩欧美中文字幕精品| 亚洲免费在线视频一区 二区| 韩国欧美一区二区| 欧美精品乱码久久久久久按摩| 国产精品乱人伦一区二区| 麻豆91免费观看| 欧美亚洲综合一区| 国产精品福利一区| 国产一区二区三区四区五区美女 | 久久午夜国产精品| 日韩影院免费视频| 在线观看亚洲精品| 国产精品久久久爽爽爽麻豆色哟哟 | 一区二区三区四区在线免费观看| 国产美女一区二区三区| 欧美一二三四区在线| 亚洲小说春色综合另类电影| 91蜜桃婷婷狠狠久久综合9色| 国产亚洲成aⅴ人片在线观看| 天天综合日日夜夜精品| 欧美亚洲一区二区三区四区| 亚洲欧洲国产日韩| 成人免费视频视频在线观看免费| 2023国产精品视频| 精品一区二区综合| 日韩一区二区电影在线| 香蕉成人伊视频在线观看| 欧美视频在线观看一区二区| 亚洲欧美色一区| 色综合久久天天综合网| 亚洲天堂2016| 96av麻豆蜜桃一区二区| 亚洲欧洲精品一区二区精品久久久| 国产精品一区二区91| 亚洲精品在线观看网站| 九色综合狠狠综合久久| 精品免费视频.| 国模套图日韩精品一区二区| 精品999在线播放| 激情欧美一区二区| 久久久国产一区二区三区四区小说 | 国产乱子伦一区二区三区国色天香| 日韩欧美久久久| 国产专区综合网| 国产精品色呦呦| 99re视频精品| 一区二区三区在线视频免费 | 精品久久国产老人久久综合| 蜜臀av在线播放一区二区三区| 欧美一区二区视频在线观看2020| 日韩精品乱码av一区二区| 91精品国产一区二区三区香蕉| 日本中文在线一区| 精品国产伦一区二区三区观看方式| 精品中文字幕一区二区小辣椒| 国产日韩高清在线| 99国产精品国产精品久久| 亚洲综合在线第一页| 欧美美女黄视频| 国产乱码精品一区二区三区忘忧草 | 欧美一级一区二区| 蜜臀av亚洲一区中文字幕| 精品国产91九色蝌蚪| 懂色av一区二区三区蜜臀| 中文字幕中文字幕在线一区| 欧美日韩在线播放三区| 久久爱www久久做| 最新日韩av在线| 欧美日韩mp4| 国产精品一区二区在线观看网站 | 久久国产人妖系列| 国产精品久久久久四虎| 欧美人体做爰大胆视频| 奇米888四色在线精品| 国产欧美一区二区在线| 色一区在线观看| 美日韩一级片在线观看| 国产精品国模大尺度视频| 欧美日韩一区小说| 国产美女久久久久| 夜夜操天天操亚洲| 久久五月婷婷丁香社区| 91福利小视频| 国产精品白丝av| 亚洲午夜视频在线| 亚洲国产激情av| 欧美精品日韩精品| 99re热视频这里只精品| 久久精品国产精品亚洲红杏| 国产精品久久久久影视| 日韩午夜电影在线观看| 99精品欧美一区二区三区小说| 日韩中文欧美在线| 亚洲视频免费观看| 精品国产免费人成电影在线观看四季 | 1024亚洲合集| 精品国产乱码久久久久久免费| 91色乱码一区二区三区| 国产揄拍国内精品对白| 亚洲成人自拍一区| 奇米影视一区二区三区小说| 国产精品国产三级国产a| 日韩欧美一二三区| 欧美三级电影在线看| 成人晚上爱看视频| 久久精品国内一区二区三区| 亚洲欧美色综合| 国产精品视频免费看| 日韩欧美一区二区视频| 欧美日韩色一区| 91激情五月电影| 丁香网亚洲国际| 精品一区二区久久| 热久久久久久久| 午夜国产精品一区| 亚洲国产va精品久久久不卡综合| 国产精品国产三级国产普通话99| 久久久久久久综合色一本| 欧美一区二区三区喷汁尤物| 91国产免费观看| 色94色欧美sute亚洲13| 99久久精品国产一区二区三区| 国产精品主播直播| 国产精品自在在线| 国内精品国产三级国产a久久| 日本不卡123| 蜜臀av一区二区在线观看| 日韩精品免费专区| 日韩精品成人一区二区在线| 亚洲图片欧美综合| 亚洲图片欧美色图| 亚洲成av人片在www色猫咪| 亚洲一区免费观看| 一区二区三区不卡视频在线观看| 亚洲欧美影音先锋|