#include "GetInfo.h"
char szdomain[];
int GetInfoToWrite(char* path, char* domain,Write_t* pwrite);
int SearchForContent(char* FilePath,Write_t *pwrite);
int main()
{
//ReadFeatureFromXml("163.com");
char* PATH="/root/Desktop/login/2014-06-27---passport.csdn.net_443---192.168.1.24_62213.http";
//SearchForContent(PATH);
// Write_t pwrite;
// GetInfoToWrite("22","22",&pwrite);
Write_t pt;
char* domain= "passport.csdn.net"; GetInfoToWrite(PATH,domain,&pt); return ;
} int GetInfoToWrite(char* path, char* domain,Write_t* pwrite)
{
strncpy(szdomain,domain,sizeof(szdomain)-);
szdomain[sizeof(szdomain)-] = '\0';
if(OP_SUCCESS == ReadFeatureFromXml(domain))
{
printf("Start Process....\n");
}else
{
printf("ReadXML Failed..\n");
return OP_FAILED;
} if(OP_SUCCESS==SearchForContent(path,pwrite))
{
printf("Search and Write Complete..\n");
free(pF.FIdBegin);
free(pF.FIdEnd);
free(pF.FPBegin);
free(pF.FPEnd);
mysql_close(conn);
return OP_SUCCESS;
}else
{
printf("Search and Write Failed..\n");
free(pF.FIdBegin);
free(pF.FIdEnd);
free(pF.FPBegin);
free(pF.FPEnd);
return OP_FAILED;
} } int InitMysqlConnect(void)
{
mysql_init(conn);
if(!mysql_real_connect(conn, "127.0.0.1", "root", "", "SecDR_F118", , NULL, ))
{
printf("connect mysql %d time error \n %s \n", mysql_errno(conn),mysql_error(conn));
mysql_close(conn);
sleep();
return OP_FAILED;
}
printf("\tInit Mysql Ok !!\n\n"); return OP_SUCCESS;
}; int UseMysqlStr(char *sqlcmd)
{
if(strlen(sqlcmd)==)
{
printf("Nothing in sqlcmd !\n");
return OP_FAILED;
} if (mysql_query(conn, sqlcmd))
{
//如果错误,把sql语句记录到日志中去
printf("-------------------line------------------\n");
printf("%s",sqlcmd);
printf("\n-------------------line------------------\n");
printf("mysql error %s\n", mysql_error(conn));
if ( == mysql_errno(conn))//
{
printf("mysql error 1062\n");
return OP_FAILED;
}
mysql_close(conn);
if (OP_SUCCESS != InitMysqlConnect())
{
printf("mysql Init Error in Function \n");
return OP_FAILED;
}
if (mysql_query(conn, sqlcmd))
{
printf("Insert or update Data error \n");
mysql_close(conn);
if (OP_SUCCESS != InitMysqlConnect())
{
printf("mysql Init Error i !!!\n");
return OP_FAILED;
}
return OP_FAILED;
} }
return OP_SUCCESS;
}; int FindKeyWord(char *sour,Write_t *pwrite)
{
char username[];
char password[];
//printf("begin :%s\n",pF.FIdBegin);
//printf("end :%s\n",pF.FPBegin);
//printf("buf :%s\n ",sour);
if( strstr(sour,(char*)(pF.FIdBegin))==NULL
|| strstr(sour,(char*)(pF.FIdEnd))==NULL)
{
printf("Can't Matching The Feature Error: Please Check XML Feature....\n");
return OP_FAILED;
}
while(*sour != '\0')
{ if( NULL == strstr(sour,(char*)(pF.FIdEnd)) || NULL == strstr(sour,(char*)(pF.FIdBegin))
|| strstr(sour,(char*)(pF.FPBegin))==NULL
|| strstr(sour,(char*)(pF.FPEnd))==NULL)
{
break;
} char *p=strstr(sour,(char*)(pF.FIdBegin));
sour = p+xmlStrlen(pF.FIdBegin);
char *q=strstr(p,(char*)(pF.FIdEnd));
sour = q+xmlStrlen(pF.FIdEnd);
char *p1=p+xmlStrlen((pF.FIdBegin));
int i=q-p1; if(i> || i<=)
{
printf("Invalid Length Of Username \n");
continue;
}
username[i] = '\0';
memcpy(username,p1,i); //strcpy(pInfo.username,username);
url_decode(username,username);
printf("username=%s \n",username);
p=strstr(sour,(char*)(pF.FPBegin));
sour = p+xmlStrlen(pF.FPBegin);
q=strstr(p,(char*)(pF.FPEnd));
sour = q+xmlStrlen(pF.FPEnd);
p1=p+xmlStrlen((pF.FPBegin));
i=q-p1;
if(i> || i<=)
{
printf("Invalid Length Of Password \n");
continue;
}
password[i] = '\0';
memcpy(password,p1,i);
//strcpy(pInfo.password,password);
url_decode(password,password);
printf("password=%s \n",password); if(pwrite==NULL)
{
printf("error : pwrite is NULL");
return OP_FAILED;
} //select from database . char sqlupdate[];
//memset(sqlupdate,0,1024);
snprintf(sqlupdate, sizeof(sqlupdate)-, FORMAT_UPDATE_INFORES,username,szdomain); char sqlcmd[];
//memset(sqlcmd,0,1024);
snprintf(sqlcmd, sizeof(sqlcmd)-, FORMAT_INSERT_INFORES,szdomain,pwrite->szSrcIP, pwrite->szAccount,username,password); char sqlselect[];
//memset(sqlselect,0,1024);
snprintf(sqlselect, sizeof(sqlselect)-, FORMAT_SELECT_INFORES,username,szdomain); int gs=mysql_query(conn,sqlselect);
if(gs){
printf("select error:\n");
} int num_rows=;
MYSQL_RES* res_ptr = mysql_store_result(conn);
if(res_ptr != NULL){
num_rows = mysql_num_rows(res_ptr);
printf("Well . There exist %lu data .\n",(unsigned long)num_rows);
}
else
{
return OP_FAILED;
} if(num_rows!=)
{
printf("update..\n");
if(UseMysqlStr(sqlupdate))
{
printf("update failed \n");
return OP_FAILED;
}
}else
{
printf("insert..\n");
if(UseMysqlStr(sqlcmd))
{
printf("insert failed \n");
return OP_FAILED;
}
}
// mysql_free_result(res_ptr); } return OP_SUCCESS;
} int SearchForContent(char* FilePath,Write_t *pwrite)
{ printf("FILE PATH: %s \n",FilePath); if (OP_SUCCESS != InitMysqlConnect())
{
printf("mysql Init Error in Function \n");
return OP_FAILED;
}
char insertRaw[] = {};
snprintf(insertRaw,sizeof(insertRaw),FORMAT_INSERT_RAW,szdomain,pwrite->szAccount,pwrite->szSrcIP,FilePath); if(OP_SUCCESS != UseMysqlStr(insertRaw))
{
printf("insert into RawResult Failed \n");
return OP_FAILED;
}
FILE *fp =NULL;
if(NULL == (fp=fopen(FilePath,"rb")))
{
fprintf(stderr,"Cannot Open The File ..\n");
return OP_FAILED;
} fseek(fp,,SEEK_END);
int number=ftell(fp);
fseek(fp,,SEEK_SET); if(number==)
{
printf("Empty File...\n");
return OP_FAILED;
}
char* buf=(char*)malloc(sizeof(char)*number);
char tmp[];
while(!feof(fp))
{
fgets(tmp,,fp);
strcat(buf,tmp);
} // int fr= fread(buf,1,number,fp);
// printf(" buf : %s\n fr=%d\n",buf,fr);
// printf(" buf len :%d \n",strlen(buf));
// printf("sizeof(char)*number = %d\n",sizeof(char)*number);
// printf(" rt :%d, number = %d\n",rt, number); if(OP_SUCCESS == FindKeyWord(buf,pwrite))
{
printf("Process Success..\n---\n");
fclose(fp);
free(buf);
return OP_SUCCESS;
}else
{
printf("Process Failed..\n---\n");
fclose(fp);
free(buf);
return OP_FAILED;
} } int ReadFeatureFromXml(char* type)
{
xmlDocPtr doc = NULL;
xmlNodePtr cur = NULL; xmlKeepBlanksDefault();
doc = xmlParseFile(Xmlpath); if(doc == NULL)
{
fprintf(stderr,"XML docment not parsed succussfully!..\n");
return OP_FAILED;
} cur = xmlDocGetRootElement(doc); if(cur == NULL)
{
fprintf(stderr,"empty document!.\n");
xmlFreeDoc(doc);
return OP_FAILED ;
}
cur = cur->children; //printf("%s \n",cur->name);
xmlChar* attr=NULL;
// cur = cur->next;
// if(!(xmlStrcmp(cur->name,(const xmlChar*)"MailType")))
// {
// attr = xmlGetProp(cur,"type");
// printf("attr = %s \n",attr);
// xmlFree(attr);
// } while (cur != NULL)
{
if(!(xmlStrcmp(cur->name,(const xmlChar*)"MailType")))
{
attr = xmlGetProp(cur,(const xmlChar*)"type"); if(!xmlStrcmp(attr,(const xmlChar*)type))
{ xmlChar* tmp = xmlNodeGetContent(cur->children->children);
pF.FIdBegin = malloc(xmlStrlen(tmp)+);
memset(pF.FIdBegin,,xmlStrlen(tmp)+);
memcpy(pF.FIdBegin,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->children->next);
pF.FIdEnd = malloc(xmlStrlen(tmp)+);
memset(pF.FIdEnd,,xmlStrlen(tmp)+);
memcpy(pF.FIdEnd,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->next->children);
pF.FPBegin=malloc(xmlStrlen(tmp)+);
memset(pF.FPBegin,,xmlStrlen(tmp)+);
memcpy(pF.FPBegin,tmp,xmlStrlen(tmp)); tmp = xmlNodeGetContent(cur->children->next->children->next);
pF.FPEnd=malloc(xmlStrlen(tmp)+);
memset(pF.FPEnd,,xmlStrlen(tmp)+);
memcpy(pF.FPEnd,tmp,xmlStrlen(tmp));
}
} cur = cur->next;
}
if(pF.FIdBegin==NULL||pF.FIdEnd==NULL || pF.FPBegin==NULL || pF.FPEnd==NULL)
{
printf("XML Feature Parsed Failed: can't find.\n");
return OP_FAILED;
}
return OP_SUCCESS;
}

xxx.h

#include <libxml/tree.h>
#include <libxml/parser.h>
#include <libxml/xmlmemory.h>
#include <mysql/mysql.h>
#include "KCommon.h" #define FORMAT_INSERT_INFORES "insert into ssltab_InfoResult(domain ,ipaddr, account, username, password, cap_time) values (\"%s\",\"%s\", \"%s\",\"%s\", \"%s\", now());"
#define FORMAT_SELECT_INFORES "select * from ssltab_InfoResult where username=\"%s\" and domain=\"%s\";"
#define FORMAT_UPDATE_INFORES "update ssltab_InfoResult set cap_time=now() where username=\"%s\" and domain=\"%s\" ;"
#define FORMAT_INSERT_RAW "insert into ssltab_RawResult(domain,account,src_ip,res_path,cap_time) values (\"%s\",\"%s\",\"%s\",\"%s\",now());"
char Xmlpath[]="/home/SecDR_F118/conf/tmp/info.xml";
int ReadFeatureFromXml(char* type);
//int SearchForContent(char* FilePath,Write_t *pwrite);
//int FindKeyWord(char *sour,Write_t *pwrite);
int UseMysqlStr(char *sqlcmd); typedef struct tWrite{
char szAccount[];
char szSrcIP[];
time_t nTime;
}Write_t; struct Info{
char username[];
char password[];
}pInfo; struct Feature{ xmlChar* FIdBegin;
xmlChar* FIdEnd;
xmlChar* FPBegin;
xmlChar* FPEnd;
}pF; static MYSQL conn[]; /* 16进制字符表 */
static const char c2x_table[] = "0123456789ABCDEF";
/* 字符转16进制 */
//static unsigned char *c2x(unsigned what,unsigned char *where)
// {
// *where++ = '%';
// *where++ = c2x_table[what>>4];
// *where++ = c2x_table[what&0xf];
// return where;
// }
/* 16进制转字符 */
static char x2c(const char *what)
{
register char digit; digit = ((what[] >= 'A') ? ((what[] & 0xdf) - 'A') + : (what[] - ''));
digit *= ;
digit += (what[] >= 'A' ? ((what[] & 0xdf) - 'A') + : (what[] - ''));
return (digit);
} size_t url_decode(const char *src,char *dest)
{
char *cp=dest; while(*src!='\0')
{
if(*src=='+')
{
*dest++=' ';
}
else if(*src=='%')
{
int ch;
ch=x2c(src+);
*dest++=ch;
src+=;
}
else
{
*dest++=*src;
}
src++;
}
*dest='\0';
return(dest-cp);
}

工作日志2014-06-10(实现C语言解析XML获得查询关键字)的更多相关文章

  1. 使用go语言解析xml

    操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 现有一个自动报障程序,如果服务出错会自动给指定人发送邮件,配置文件内容如下(default.xml): <?xml ...

  2. 使用SharePoint Designer定制开发员工工作日志系统实例!

    昨天已介绍了一篇<使用SharePoint Designer定制开发专家库系统实例!>,今天继续来介绍使用SharePoint Designer定制开发员工工作日志系统实例,主要功能包括填 ...

  3. 2014年10月底/终于/HTML5定稿……/技术从来不会成为发展的绝对瓶颈/反而商业成了无法逾越的鸿沟【转载+整理】

    原文地址 本文内容 一.HTML5 诞生 二.HTML5 第一阶段: Web 增强与打破垄断 三.HTML5 第二阶段: 移动互联网 四.HTML5 这回真的来了 五.颠覆原生 App 六.还有什么会 ...

  4. 大型网站演化(转载 http://homeway.me/2014/12/10/think-about-distributed-clusters/)

    0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Clu ...

  5. 2014 年10个最佳的PHP图像操作库

    2014 年10个最佳的PHP图像操作库   Thomas Boutell 以及众多的开发者创造了以GD图形库闻名的一个图形软件库,用于动态的图形计算. GD提供了对于诸如C, Perl, Pytho ...

  6. 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码

    原文出处: 平凡之路的博客   欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...

  7. 工作日志,error parsing query: unable to find time zone

    工作日志,error parsing query: unable to find time zone 坑 Windows 系统使用influxdb数据库,在执行查询语句时提示 ERR: error p ...

  8. 转载_最值得阅读学习的10个C语言开源项目代码

    "源代码面前,了无秘密",阅读优秀代码无疑是开发人员得以窥见软件堂奥而登堂入室的捷径.本文选取10个C语言优秀开源项目的代码作为范本,分别给予点评,免去东搜西罗之苦,点赞!那么问题 ...

  9. 系列文章:老项目的#iPhone6与iPhone6Plus适配#(持续更新中,更新日期2014年10月12日 星期日 )

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4020399.html ,转载请注明出处. ********************************** ...

随机推荐

  1. centos防火墙端口配置

    增加防火墙配置,允许8080端口: # vi /etc/sysconfig/iptables 在允许ssh的下面增加一条: -A INPUT -m state --state NEW -m tcp - ...

  2. hdu1238--Substrings

    暴力求解 题意:求一个公共子串的最大长度,反转的公共子串存在也算. 求解思路:先找出最短的字符串进行暴力枚举.每截取一个子串后,求出它的反转字符串,然后检验这两个子字符串是否存在输入的字符串组中,每个 ...

  3. git https连接方式,记住密码

    Git使用https方式进行连接时,默认每次推送时都要输入用户名和密码. 可以使用命令 $git config credential.helper store 为当前仓库设置记住密码,设置后,只要在推 ...

  4. textarea 输入框限制字数

    在textarea标签中,只需要设置maxlength=”***”即可,但是在textarea标签中,IE9及IE9以下浏览器是不支持的,IE10.IE11则支持,估计后续的版本应该都会支持. 现在来 ...

  5. You have not agreed to the Xcode license.

    You have not agreed to the Xcode license. Before running the installer again please agree to the lic ...

  6. cookie简介

    上例子 1.首先要用php创建cookie发送给客户端,利用setcookie()方法即可 <?php /* * * @Authors peng--jun * @Email 1098325951 ...

  7. spoj COT2 - Count on a tree II 树上莫队

    题目链接 http://codeforces.com/blog/entry/43230树上莫队从这里学的,  受益匪浅.. #include <iostream> #include < ...

  8. Scala的类中定义内部类实战

    scala独特之处在于可以在类中定义内部类,起到对外屏蔽作用. 类中默认都是public权限.后面将讲解如何引入接口,scala中的接口与java点区别.特质/接口(Trait)

  9. HTML5学习笔记之Input类型

    Input类型——email email类型用于包含email地址的输入域,在输入地址时会自动验证email域的值 例:Email:<input type="email" n ...

  10. alois

    Background It's not simple to know what happens in a bigger network. There's a multitude of applicat ...