⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdpcommon.c

📁 linux下流媒体下载程序代码
💻 C
字号:
/*********************************************************************** *    sdpcommon.c:  sdp common operations *********************************************************************** * Copyright (C) 2007 metro <me_t_ro@yahoo.com> * * This file is part of msdl, media stream downloader * * Common operations to handle sdp (session description protocol) data. *  * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of 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 of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. * ***********************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include "msdllib.h"#include "display.h"#include "sdpcommon.h"/* * * it's alwasys [decoded length] < [encoded length]  (it's guranteed) * *   return value:    length of original (before base64 encode string) bytearray * */int base64_decode(char *enc,char *dec,int decsize){    int i,j;    char dtable[256];          for( i = 0; i < 255; i++) {	dtable[i] = 0x80;    }    for(i = 'A' ; i <= 'Z'; i++) {	dtable[i] = 0 + (i - 'A');    }    for(i = 'a' ; i <= 'z'; i++) {	dtable[i] = 26 + (i - 'a');    }    for(i = '0' ; i <= '9'; i++) {	dtable[i] = 52 + (i - '0');    }    dtable['+'] = 62;    dtable['/'] = 63;    dtable['='] = 0;            for(i = j = 0; i<strlen(enc) ; i += 4) {	char input[4], output[3];		input[0] = dtable[(enc[i + 0] & 0xff)];	input[1] = dtable[(enc[i + 1] & 0xff)];	input[2] = dtable[(enc[i + 2] & 0xff)];	input[3] = dtable[(enc[i + 3] & 0xff)];        	output[0] = (input[0] << 2) | (input[1] >> 4);	output[1] = (input[1] << 4) | (input[2] >> 2);	output[2] = (input[2] << 6) | (input[3]);		if(j >= decsize) goto overflow;	dec[j] = output[0];	if(enc[i + 2] == '=') return j+1;		if(j + 1 >= decsize) goto overflow;	dec[j + 1] = output[1];	if(enc[i + 3] == '=') return j+2;	if(j + 2 >= decsize) goto overflow;	dec[j + 2] = output[2];	j += 3;    }    return j;      overflow:    display(MSDL_ERR,"internal error: base64 overflow!\n");    return -1;}int is_line(char *line,char *keyword,char **buf,int *len){      if(!strncasecmp(line,keyword,strlen(keyword))) {	int newlen;	line += strlen(keyword);	newlen = strchr(line,'\n') ? (strchr(line,'\n') - line) : strlen(line);	if(line[newlen - 1] == '\r') newlen--;    	if(*line == '"') {	    char *last;	    last = line + newlen;	    while(*last != '"') last--;	    newlen = last - line - 1; /* 1 is for " */	    line++; /* points to inside "foo" */	}    	if(*len < newlen + 1) {	    *buf = (char *)xrealloc(*buf,newlen + 1);	    *len = newlen + 1;	}    	memcpy(*buf,line,newlen);	(*buf)[newlen] = 0;	/* printf("is_line %s newlen = %d\n%s\n",keyword,newlen,*buf); */    	return 1;    }    else {	return 0;    }}char *next_line(char *data){    data = strchr(data,'\n');    if(data) data++;    return data;}int keep_dec_size(char **buf,int *buflen,int keep){    if(*buflen < keep) {	*buflen = keep;	*buf = xrealloc(*buf,keep);	return keep;    }    else return *buflen;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -