|
#include <stdarg.h>
|
#include <netinet/in.h>
|
#include <sys/socket.h>
|
#include <arpa/inet.h>
|
#include <signal.h>
|
#include <unistd.h>
|
#include <sys/stat.h>
|
#include <sys/types.h>
|
|
#include <stdio.h>
|
#include "tool.h"
|
|
|
static const char base64Char[] =
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
char* base64MyEncode(char const* origSigned, unsigned origLength)
|
{
|
unsigned char const* orig = (unsigned char const*)origSigned; // in case any input bytes have the MSB set
|
if (orig == NULL) return NULL;
|
|
unsigned const numOrig24BitValues = origLength/3;
|
bool havePadding = origLength > numOrig24BitValues*3;
|
bool havePadding2 = origLength == numOrig24BitValues*3 + 2;
|
unsigned const numResultBytes = 4*(numOrig24BitValues + havePadding);
|
char* result = new char[numResultBytes+1]; // allow for trailing '\0'
|
|
// Map each full group of 3 input bytes into 4 output base-64 characters:
|
unsigned i;
|
for (i = 0; i < numOrig24BitValues; ++i) {
|
result[4*i+0] = base64Char[(orig[3*i]>>2)&0x3F];
|
result[4*i+1] = base64Char[(((orig[3*i]&0x3)<<4) | (orig[3*i+1]>>4))&0x3F];
|
result[4*i+2] = base64Char[((orig[3*i+1]<<2) | (orig[3*i+2]>>6))&0x3F];
|
result[4*i+3] = base64Char[orig[3*i+2]&0x3F];
|
}
|
|
// Now, take padding into account. (Note: i == numOrig24BitValues)
|
if (havePadding) {
|
result[4*i+0] = base64Char[(orig[3*i]>>2)&0x3F];
|
if (havePadding2) {
|
result[4*i+1] = base64Char[(((orig[3*i]&0x3)<<4) | (orig[3*i+1]>>4))&0x3F];
|
result[4*i+2] = base64Char[(orig[3*i+1]<<2)&0x3F];
|
} else {
|
result[4*i+1] = base64Char[((orig[3*i]&0x3)<<4)&0x3F];
|
result[4*i+2] = '=';
|
}
|
result[4*i+3] = '=';
|
}
|
|
result[numResultBytes] = '\0';
|
return result;
|
}
|
|
int GetClockTime()
|
{
|
struct timespec times;
|
|
clock_gettime(CLOCK_MONOTONIC, ×);
|
|
return times.tv_sec;
|
}
|
|
bool IsVideoPayloadType(int type)
|
{
|
if(type >= 96 && type <= 127)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
bool IsPsHeader(unsigned char *data)
|
{
|
if(data[0] == 0 && data[1] == 0 && data[2] == 1 && data[3] == 0xBA)
|
return true;
|
return false;
|
}
|
|
|
char* strMyDup(char const* str) {
|
if (str == NULL) return NULL;
|
size_t len = strlen(str) + 1;
|
char* copy = new char[len];
|
|
if (copy != NULL) {
|
memcpy(copy, str, len);
|
}
|
return copy;
|
}
|
|
char* strMyDupSize(char const* str) {
|
size_t dummy;
|
|
return strMyDupSize2(str, dummy);
|
}
|
|
char* strMyDupSize2(char const* str, size_t& resultBufSize) {
|
if (str == NULL) {
|
resultBufSize = 0;
|
return NULL;
|
}
|
|
resultBufSize = strlen(str) + 1;
|
char* copy = new char[resultBufSize];
|
|
return copy;
|
}
|
|
|