コード例 #1
0
ファイル: socket.c プロジェクト: alex1818/OpenLive4Cam
int sendRTPPacket(rtp_out_handle* p, uint8_t *p_nalu, int i_size, int first, int last, int nalu_typ)
{
    char buffer[MAX_RTP_PACKET_SIZE];
    BYTE marker = 0;
    int ret = 0;
    if(last) marker = 1;
    BYTE payloadTyp = 96;
    
    memset(buffer, 0, MAX_RTP_PACKET_SIZE);
    getHead(buffer, marker, payloadTyp, p->sequenznummer++, p->timestamp, p->ssrc);

    if( first & last )
    {
        // a FU_A is not allowed here by RFC 3984
        buffer[12] = nalu_typ;
        memcpy( buffer+13, p_nalu, i_size );
        i_size += 13;
    }
    else
    {
        // send FU-A (fragmentation unit type A)
        // F|NRI| Type
        buffer[12] = 28 | (nalu_typ & 0x60); // FU indicator. NRI taken from original NAL unit
        // S|E|R| Type
        buffer[13] = (first ? 0x80 : 0) | (last ? 0x40 : 0) | (0x1F & nalu_typ); // FU header: S:1 E:1 R:1 Typ:5
        memcpy( buffer+14, p_nalu, i_size );
        i_size += 14;
    }
  //  printf("timestamp %10d: sending %4d bytes\n", p->timestamp, i_size );
    ret = send(p->socket, buffer, i_size, 0);
    if(ret < 0)
    {
#ifdef _WIN32
        int err = WSAGetLastError();
        fprintf(stderr, "Fehler bei send:  %s\n\n", getErrnoText());
        if(err == WSAEINVAL) return 0;
#else
        fprintf(stderr, "Fehler bei send: %d, %s\n\n", errno, getErrnoText());
        if(errno == 111) return 0;
#endif
        return -1;
    }
    
    return ret;

}
コード例 #2
0
void CMainFrame::onFileMruFile(int index) {
  TextView *view = getActiveTextView();
  if(view == NULL) return;
  try {
    const String fname = theApp.getRecentFile(index);

    if(ACCESS(fname, 4) < 0) {
      const int errorCode = errno;
      showWarning(getErrnoText());
      if(errorCode == ENOENT) {
        theApp.removeFromRecentFiles(index);
      }
      return;
    }
    CWinDiffDoc *doc = view->getDocument();
    doc->setDoc(view->getId(),DIFFDOC_FILE, fname);
    Invalidate(FALSE);
    //view->refreshBoth();
  } catch(Exception e) {
    showException(e);
  }
}
コード例 #3
0
ファイル: socket.c プロジェクト: alex1818/OpenLive4Cam
int openSocket(const char* address, const char* port)
{
	printf("openSocket\n");
	int s = 0, status;
#ifdef _WIN32
	WSADATA wsaData;
	//WSAData wsaData; //falls das andere nicht geht
	// MAKEWORD(1,1) for  Winsock 1.1, MAKEWORD(2,0) for Winsock 2.0:
	if(!WSAInit)
	{
		if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
		{
			fprintf(stderr, "WSAStartup failed.\n");
			return -1;
		}
		WSAInit = 1;
	}
#endif
	struct addrinfo hints, *servinfo = NULL, *p = NULL, *pSocket = NULL;
	memset(&hints, 0, sizeof(struct addrinfo));

	//prepare
	hints.ai_family = AF_INET;
        hints.ai_socktype = SOCK_DGRAM;
        hints.ai_protocol = IPPROTO_UDP;
//	*/
	
	// do the lookup
	// [pretend we already filled out the "hints" struct]
	status = getaddrinfo(address, port, &hints, &servinfo);
	if(status != 0)
	{
		printf("status != 0\n");
		fprintf(stderr, "addresse: %s, port: %s, getaddrinfo error: %s\n", address, port, gai_strerror(status));
		return -1;
	}
	//printf("getaddrinfo fertig\n");

	// Retrieve each address and print out the hex bytes
    for(p=servinfo; p != NULL ;p=p->ai_next) 
	{
#ifdef __DEBUG
		printInfos(p);
#endif
		//Socket erstellen
		if ((s = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) 
		{
			fprintf(stderr, "socket erstellung fehlgeschlagen, weiter naechster Versuch!\n");
			continue;
		}
		else
		{
			pSocket= p;
			fprintf(stderr, "socket wurde erstellt!\n");
			break;
		}
    }
#ifdef __DEBUG
	printf("socket %d\n", s);	
#endif
	
	if(s != -1)
	{	
		//printf("s: %d, ai_addr: %d" );//, ai_addr: %d, ai_addrlen: %d", s, p->ai_addr, p->ai_addrlen);
		// socket connecten, damit der send aufruf leichter ist
		if(connect(s, pSocket->ai_addr, pSocket->ai_addrlen) != 0)
		{
#ifdef _WIN32
			//int err = WSAGetLastError();
			fprintf(stderr, "errorcode: %s ", getErrnoText());
#endif
			fprintf(stderr, "Fehler beim connecten: %d, %s\n", errno, getErrnoText());
		}	
		else
		{
			printf("connection wurde erstellet\n");
		}
	}
	
	freeaddrinfo(servinfo);
	
	return s;					
}