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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? gsmd.c

?? Linux下gsm/gprs modem的看守程序。支持短信發(fā)送與接受。
?? C
字號(hào):
/* gsmd core * * (C) 2006-2007 by OpenMoko, Inc. * Written by Harald Welte <laforge@openmoko.org> * All Rights Reserved * * 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 <unistd.h>#include <string.h>#include <errno.h>#include <fcntl.h>#include <termios.h>#include <signal.h>#define _GNU_SOURCE#include <getopt.h>#include <sys/types.h>#include <sys/stat.h>#include "gsmd.h"#include "gsmd-version.h"#include <gsmd/gsmd.h>#include <gsmd/atcmd.h>#include <gsmd/select.h>#include <gsmd/usock.h>#include <gsmd/vendorplugin.h>#include <gsmd/talloc.h>#include <gsmd/sms.h>#include <gsmd/unsolicited.h>#define GSMD_ALIVECMD		"AT"#define GSMD_ALIVE_INTERVAL	5*60#define GSMD_ALIVE_TIMEOUT	30static struct gsmd g;static int daemonize = 0;/* alive checking * either OK or ERROR is allowed since, both mean the modem still responds */static int gsmd_alive_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp){	struct gsmd *g = ctx;	if (!strcmp(resp, "OK") || !strcmp(resp, "ERROR") ||	    ((g->flags & GSMD_FLAG_V0) && resp[0] == '0'))		g->alive_responded = 1;	return 0;}static void alive_tmr_cb(struct gsmd_timer *tmr, void *data){	struct gsmd *g = data;	DEBUGP("gsmd_alive timer expired\n");	if (g->alive_responded == 0) {		gsmd_log(GSMD_FATAL, "modem dead!\n");		exit(3);	} else		gsmd_log(GSMD_INFO, "modem alive!\n");	/* FIXME: update some global state */	gsmd_timer_free(tmr);}static struct gsmd_timer * alive_timer(struct gsmd *g){ 	struct timeval tv;	tv.tv_sec = GSMD_ALIVE_TIMEOUT;	tv.tv_usec = 0;	return gsmd_timer_create(&tv, &alive_tmr_cb, g);}static int gsmd_modem_alive(struct gsmd *gsmd){	struct gsmd_atcmd *cmd;	gsmd->alive_responded = 0;	cmd = atcmd_fill(GSMD_ALIVECMD, strlen(GSMD_ALIVECMD)+1, 			 &gsmd_alive_cb, gsmd, 0, alive_timer);	if (!cmd) {		return -ENOMEM;	}	return atcmd_submit(gsmd, cmd);}static void alive_interval_tmr_cb(struct gsmd_timer *tmr, void *data){	struct gsmd *gsmd = data;	DEBUGP("interval expired, starting next alive inquiry\n");	/* start a new alive check iteration */	gsmd_modem_alive(gsmd);	/* re-add the timer for the next interval */	tmr->expires.tv_sec = GSMD_ALIVE_INTERVAL;	tmr->expires.tv_usec = 0;	gsmd_timer_register(tmr);}int gsmd_alive_start(struct gsmd *gsmd){	struct timeval tv;	tv.tv_sec = GSMD_ALIVE_INTERVAL;	tv.tv_usec = 0;	if (!gsmd_timer_create(&tv, &alive_interval_tmr_cb, gsmd))		return -1;	return 0;}/* initial startup code */static int gsmd_test_atcb(struct gsmd_atcmd *cmd, void *ctx, char *resp){	DEBUGP("`%s' returned `%s'\n", cmd->buf, resp);	return 0;}static int gsmd_get_imsi_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp){	struct gsmd *g = ctx;	DEBUGP("imsi : %s\n", resp);	strlcpy(g->imsi, resp, sizeof(g->imsi));	return 0;}int gsmd_simplecmd(struct gsmd *gsmd, char *cmdtxt){	struct gsmd_atcmd *cmd;	cmd = atcmd_fill(cmdtxt, strlen(cmdtxt)+1, &gsmd_test_atcb, NULL, 0, NULL);	if (!cmd)		return -ENOMEM;		return atcmd_submit(gsmd, cmd);}static int gsmd_initsettings2(struct gsmd *gsmd){	int rc = 0;		/* echo on, verbose */	rc |= gsmd_simplecmd(gsmd, "ATE0V1");	/* use +CRING instead of RING */	rc |= gsmd_simplecmd(gsmd, "AT+CRC=1");	/* enable +CREG: unsolicited response if registration status changes */	rc |= gsmd_simplecmd(gsmd, "AT+CREG=2");	/* use +CME ERROR: instead of ERROR */	rc |= gsmd_simplecmd(gsmd, "AT+CMEE=1");	/* use +CLIP: to indicate CLIP */	rc |= gsmd_simplecmd(gsmd, "AT+CLIP=1");	/* use +COLP: to indicate COLP */	/* set it 0 to disable subscriber info and avoid cme err 512 */	rc |= gsmd_simplecmd(gsmd, "AT+COLP=0");	/* use +CCWA: to indicate waiting call */	rc |= gsmd_simplecmd(gsmd, "AT+CCWA=1,1");	/* configure message format as PDU mode*/	/* FIXME: TEXT mode support!! */	rc |= gsmd_simplecmd(gsmd, "AT+CMGF=0");	/* reueset imsi */	atcmd_submit(gsmd, atcmd_fill("AT+CIMI", 7+1,					&gsmd_get_imsi_cb, gsmd, 0, NULL));	sms_cb_init(gsmd);	if (gsmd->vendorpl && gsmd->vendorpl->initsettings){		rc |= gsmd->vendorpl->initsettings(gsmd);		if (gsmd->machinepl && gsmd->machinepl->initsettings)			rc |= gsmd->machinepl->initsettings(gsmd);		return rc;	}		else		return rc;}static int firstcmd_response = 0;/* we submit the first atcmd and wait synchronously for a valid response */static int firstcmd_atcb(struct gsmd_atcmd *cmd, void *ctx, char *resp){	struct gsmd *gsmd = ctx;	if (strcmp(resp, "OK") &&	    (!(gsmd->flags & GSMD_FLAG_V0) || resp[0] != '0')) {		// temporarily changed to GSMD_ERROR instead of GSMD_FATAL + commented out exit(4) :M:		gsmd_log(GSMD_ERROR, "response '%s' to initial command invalid", resp);		//exit(4);	}	firstcmd_response = 1;	if (daemonize) {		if (fork()) {			exit(0);		}		fclose(stdout);		fclose(stderr);		fclose(stdin);		setsid();	}	return gsmd_initsettings2(gsmd);}int gsmd_initsettings(struct gsmd *gsmd){	struct gsmd_atcmd *cmd;	cmd = atcmd_fill("ATZ", strlen("ATZ")+1, &firstcmd_atcb, gsmd, 0, NULL);	if (!cmd)		return -ENOMEM;	return atcmd_submit(gsmd, cmd);}struct bdrt {	int bps;	u_int32_t b;};static struct bdrt bdrts[] = {	{ 0, B0 },	{ 9600, B9600 },	{ 19200, B19200 },	{ 38400, B38400 },	{ 57600, B57600 },	{ 115200, B115200 },	{ 230400, B230400 },	{ 460800, B460800 },	{ 921600, B921600 },};static int set_baudrate(int fd, int baudrate, int hwflow){	int i;	u_int32_t bd = 0;	struct termios ti;	for (i = 0; i < ARRAY_SIZE(bdrts); i++) {		if (bdrts[i].bps == baudrate)			bd = bdrts[i].b;	}	if (bd == 0)		return -EINVAL;		i = tcgetattr(fd, &ti);	if (i < 0) {                return -errno;        }		i = cfsetispeed(&ti, B0);	if (i < 0) {                return -errno;        }		i = cfsetospeed(&ti, bd);	if (i < 0) {                return -errno;        }		if (hwflow)		ti.c_cflag |= CRTSCTS;	else		ti.c_cflag &= ~CRTSCTS;	return tcsetattr(fd, 0, &ti) ? -errno : 0;}static int gsmd_initialize(struct gsmd *g){	INIT_LLIST_HEAD(&g->users);	g->mlbuf = talloc_array(gsmd_tallocs, unsigned char, MLPARSE_BUF_SIZE);	if (!g->mlbuf)		return -ENOMEM;	return 0;}static struct option opts[] = {	{ "version", 0, NULL, 'V' },	{ "daemon", 0, NULL, 'd' },	{ "help", 0, NULL, 'h' },	{ "device", 1, NULL, 'p' },	{ "speed", 1, NULL, 's' },	{ "logfile", 1, NULL, 'l' },	{ "hwflow", 0, NULL, 'F' },	{ "leak-report", 0, NULL, 'L' },	{ "vendor", 1, NULL, 'v' },	{ "machine", 1, NULL, 'm' },	{ "wait", 1, NULL, 'w' },	{ 0, 0, 0, 0 }};static void print_header(void){	printf("gsmd - (C) 2006-2007 by OpenMoko, Inc. and contributors\n"	       "This program is FREE SOFTWARE under the terms of GNU GPL\n\n");}static void print_version(void){	printf("gsmd, version %s\n",GSMD_VERSION);}static void print_usage(void){	printf("Usage:\n"	       "\t-V\t--version\tDisplay program version\n"	       "\t-d\t--daemon\tDeamonize\n"	       "\t-h\t--help\t\tDisplay this help message\n"	       "\t-p dev\t--device dev\tSpecify serial device to be used\n"	       "\t-s spd\t--speed spd\tSpecify speed in bps (9600,38400,115200,...)\n"	       "\t-F\t--hwflow\tHardware Flow Control (RTS/CTS)\n"	       "\t-L\t--leak-report\tLeak Report of talloc memory allocator\n"	       "\t-l file\t--logfile file\tSpecify a logfile to log to\n"	       "\t-v\t--vendor v\tSpecify GSM modem vendor plugin\n"	       "\t-m\t--machine m\tSpecify GSM modem machine plugin\n"	       "\t-w\t--wait m\tWait for the AT Interpreter Ready message\n"	       );}static void sig_handler(int signr){	switch (signr) {	case SIGTERM:	case SIGINT:		talloc_report_full(gsmd_tallocs, stderr);		exit(0);		break;	case SIGUSR1:		talloc_report_full(gsmd_tallocs, stderr);	case SIGALRM:		gsmd_timer_check_n_run();		break;	}}int main(int argc, char **argv){	int fd, argch; 	int bps = 115200;	int hwflow = 0;	char *device = NULL;	char *vendor_name = NULL;	char *machine_name = NULL;	int wait = -1;	signal(SIGTERM, sig_handler);	signal(SIGINT, sig_handler);	signal(SIGUSR1, sig_handler);	signal(SIGALRM, sig_handler);		gsmd_tallocs = talloc_named_const(NULL, 1, "GSMD");	print_header();	/*FIXME: parse commandline, set daemonize, device, ... */	while ((argch = getopt_long(argc, argv, "FVLdhp:s:l:v:m:w:", opts, NULL)) != -1) {		switch (argch) {		case 'V':			print_version();			exit(0);			break;		case 'L':			talloc_enable_leak_report_full();			break;		case 'F':			hwflow = 1;			break;		case 'd':			daemonize = 1;			break;		case 'h':			/* FIXME */			print_usage();			exit(0);			break;		case 'p':			device = optarg;			break;		case 's':			bps = atoi(optarg);			break;		case 'l':			if (gsmdlog_init(optarg)) {				fprintf(stderr, "can't open logfile `%s'\n", optarg);				exit(2);			}			break;		case 'v':			vendor_name = optarg;			break;		case 'm':			machine_name = optarg;			break;		case 'w':			wait = atoi(optarg);			break;		}	}	if (!device) {		fprintf(stderr, "ERROR: you have to specify a port (-p port)\n");		print_usage();		exit(2);	}	/* use direct access to device node ([virtual] tty device) */	fd = open(device, O_RDWR);	if (fd < 0) {		fprintf(stderr, "can't open device `%s': %s\n",			device, strerror(errno));		exit(1);	}	if (set_baudrate(fd, bps, hwflow) < 0) {		fprintf(stderr, "can't set baudrate\n");		exit(1);	}	if (gsmd_initialize(&g) < 0) {		fprintf(stderr, "internal error\n");		exit(1);	}	gsmd_timer_init();	if (gsmd_machine_plugin_init(&g, machine_name, vendor_name) < 0) {		fprintf(stderr, "no machine plugins found\n");		exit(1);	}	/* select a machine plugin and load possible vendor plugins */	gsmd_machine_plugin_find(&g);	/* initialize the machine plugin */	if (g.machinepl->init &&	    (g.machinepl->init(&g, fd) < 0)) {		fprintf(stderr, "couldn't initialize machine plugin\n");		exit(1);	}	if (wait >= 0)		g.interpreter_ready = !wait;	if (atcmd_init(&g, fd) < 0) {		fprintf(stderr, "can't initialize UART device\n");		exit(1);	}        write(fd,"\r",1);	atcmd_drain(fd);	if (usock_init(&g) < 0) {		fprintf(stderr, "can't open unix socket\n");		exit(1);	}	/* select a vendor plugin */	gsmd_vendor_plugin_find(&g);	unsolicited_init(&g);	if (g.interpreter_ready) {		gsmd_initsettings(&g);			gsmd_alive_start(&g);	}	gsmd_opname_init(&g);	while (1) {		int ret = gsmd_select_main();		if (ret == 0)			continue;		if (ret < 0) {			if (errno == EINTR)				continue;			else {				DEBUGP("select returned error (%s)\n",					strerror(errno));				break;			}		}	}	exit(0);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女免费视频| 欧美精品一区二区在线播放| 91精品国产欧美日韩| 日韩亚洲电影在线| 亚洲国产成人在线| 一区二区欧美国产| 蜜桃视频在线一区| 成人av资源在线| 欧美一卡二卡在线观看| 久久久久国产一区二区三区四区| 日韩一区欧美一区| 蜜臀久久99精品久久久久久9| 丁香桃色午夜亚洲一区二区三区| 91搞黄在线观看| 欧美大肚乱孕交hd孕妇| 亚洲视频在线观看一区| 视频在线观看一区| 成人精品视频一区| 日韩欧美在线1卡| 亚洲精品免费在线观看| 激情小说欧美图片| 91美女视频网站| 久久婷婷国产综合精品青草| 亚洲最新视频在线观看| 国产成人亚洲综合色影视| 欧美私人免费视频| 欧美韩日一区二区三区| 天天亚洲美女在线视频| av网站免费线看精品| 日韩欧美亚洲另类制服综合在线| 国产精品久久久久久久久久久免费看 | 精品久久久久一区| 一区二区三区中文在线观看| 国产jizzjizz一区二区| 日韩精品一区二区三区在线观看 | 91丨porny丨首页| 精品伦理精品一区| 亚洲成人av在线电影| 99久久综合狠狠综合久久| 精品福利一区二区三区免费视频| 亚洲香肠在线观看| 99v久久综合狠狠综合久久| 337p粉嫩大胆噜噜噜噜噜91av| 午夜视频久久久久久| 日本精品视频一区二区| 18欧美乱大交hd1984| 国产成人超碰人人澡人人澡| 日韩精品一区二区在线观看| 亚洲国产精品久久艾草纯爱| 色噜噜狠狠色综合中国| 国产精品国产三级国产普通话蜜臀| 国产在线精品视频| 精品欧美乱码久久久久久1区2区| 日韩不卡在线观看日韩不卡视频| 欧美性色综合网| 亚洲女子a中天字幕| 99久久夜色精品国产网站| 国产欧美一区二区精品性色| 99国产精品99久久久久久| 久久精品一区二区三区四区| 韩国成人精品a∨在线观看| 日韩三级视频在线观看| 日韩精品1区2区3区| 欧美日韩精品一区二区天天拍小说| 一区二区三区四区不卡视频| 色综合久久88色综合天天免费| 自拍偷拍亚洲激情| 色综合久久综合| 亚洲一区二区在线视频| 欧美一a一片一级一片| 一区二区不卡在线播放| 91行情网站电视在线观看高清版| 亚洲男同性视频| 日本道色综合久久| 午夜精品免费在线观看| 欧美一区二区私人影院日本| 麻豆freexxxx性91精品| 亚洲精品一区二区三区香蕉 | 久久尤物电影视频在线观看| 久久99精品久久久久婷婷| 精品盗摄一区二区三区| 国内成人精品2018免费看| 久久新电视剧免费观看| 国产a精品视频| 国产精品久久久久久久第一福利| 波多野结衣的一区二区三区| 亚洲色图在线播放| 日本道精品一区二区三区| 亚洲国产另类av| 日韩一区二区三区四区| 狠狠狠色丁香婷婷综合久久五月| 国产亚洲一本大道中文在线| 99久久久无码国产精品| 亚洲综合自拍偷拍| 91精品久久久久久久91蜜桃| 激情另类小说区图片区视频区| 久久久久久一级片| voyeur盗摄精品| 亚洲欧美电影一区二区| 91精品国产色综合久久| 国产九色精品成人porny| 最新中文字幕一区二区三区| 欧美日韩在线播放| 国内精品嫩模私拍在线| 国产精品久久久久久久久图文区 | 在线观看一区不卡| 日本欧美一区二区三区乱码| 久久综合av免费| 91麻豆成人久久精品二区三区| 香蕉久久夜色精品国产使用方法| 日韩欧美高清在线| 国产成人综合亚洲网站| 夜夜夜精品看看| 欧美videos中文字幕| 成人动漫视频在线| 亚洲国产精品嫩草影院| 久久午夜国产精品| 日本伦理一区二区| 久久超级碰视频| 亚洲美腿欧美偷拍| 日韩精品一区二区三区蜜臀| av亚洲精华国产精华精| 日日骚欧美日韩| 中文一区在线播放| 欧美日韩国产欧美日美国产精品| 国产精品资源在线看| 亚洲v精品v日韩v欧美v专区| 欧美韩日一区二区三区| 欧美日韩国产高清一区| 成人午夜视频福利| 日本视频中文字幕一区二区三区| 国产拍揄自揄精品视频麻豆| 欧美区在线观看| 99久久精品国产观看| 加勒比av一区二区| 亚洲线精品一区二区三区 | 99免费精品在线观看| 蜜臀久久99精品久久久久久9 | 欧美亚洲国产一区二区三区va| 国产一区二区三区四区五区美女| 亚洲国产另类av| 亚洲色图视频网站| 久久久蜜臀国产一区二区| 7777精品伊人久久久大香线蕉完整版| 大尺度一区二区| 久久99精品国产麻豆婷婷洗澡| 亚洲一区二区精品视频| 亚洲欧洲日韩在线| 亚洲精品一区二区三区在线观看 | 欧美aⅴ一区二区三区视频| 亚洲日本丝袜连裤袜办公室| 国产婷婷色一区二区三区四区| 欧美一区二区三区四区在线观看| 在线看国产一区二区| av亚洲精华国产精华| 国产成人精品亚洲777人妖| 久久99精品视频| 美女爽到高潮91| 日韩精品一区第一页| 亚洲一区视频在线| 一区二区三区在线视频观看| 一色桃子久久精品亚洲| 国产精品水嫩水嫩| 欧美国产1区2区| 久久精品亚洲精品国产欧美kt∨ | 成人午夜免费视频| 国产a精品视频| 国产成人精品三级| 国产一区二区视频在线播放| 精品一区二区在线免费观看| 免费成人在线影院| 日韩国产欧美在线观看| 日韩精品免费视频人成| 亚洲成人激情av| 亚洲第一精品在线| 香蕉影视欧美成人| 日韩黄色一级片| 日本欧美一区二区| 久久国内精品自在自线400部| 美国十次综合导航| 久久精品国产成人一区二区三区| 免费观看久久久4p| 极品少妇xxxx精品少妇| 激情图片小说一区| 国产盗摄精品一区二区三区在线| 九色porny丨国产精品| 精品一区精品二区高清| 国产精品一区在线观看你懂的| 国产精品性做久久久久久| 国产91色综合久久免费分享| 国产成都精品91一区二区三| 成人av在线一区二区三区| 99综合电影在线视频| 色94色欧美sute亚洲线路一久| 91国偷自产一区二区开放时间| 在线亚洲人成电影网站色www| 欧美探花视频资源| 日韩视频国产视频| 久久精品亚洲国产奇米99| 中文字幕一区在线|