#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. SessionState的配置 [转载]

    ASP.NET会话状态模块在Web.config文件中<System.web>标记下的<Sessionstate>标记的mode属性来决定该属性的四种可能的值: Off. In ...

  2. JRainbow开发进度

    最新版本下载 http://pan.baidu.com/s/1c0GcDMg&third=15 相关信息 JRainbow的简单介绍:http://blog.csdn.net/jrainbow ...

  3. Arduino周边模块:LCD与数码管

    Arduino周边模块:LCD与数码管 Arduino周边模块:LCD与数码管 数码管的介绍 数码管一般是用来显示数字和字符的 数码管原理 一位数码管 该图是一个8段数码管,该数码管中包含了8个LED ...

  4. J2SE知识点摘记(二十四)

     覆写hashCode() 在明白了HashMap具有哪些功能,以及实现原理后,了解如何写一个hashCode()方法就更有意义了.当然,在HashMap中存取一个键值对涉及到的另外一个方法为equa ...

  5. 解密电子书之四:MCU(freescale)

    谈完国产的君正,让我们再看看呛了君正财路的freescale iMX51. 这是freescale近期的主打产品,用的是ARM Cortex A8架构,主频在消费电子领域最高可达800MHz,在工业领 ...

  6. 使用WinSetupFromUSB来U盘安装windowsXP(不使用win PE系统)

    目前用U盘安装XP的多数方法都要借助WINPE,比较麻烦.使用WinSetupFromUSB只需要下载一个6.5MB的绿色软件就可以制作好windows xp的安装U盘,方便简捷. WinSetupF ...

  7. HDU 5727 Necklace(二分图匹配)

    [题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=5727 [题目大意] 现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环,已知有些阴珠子和阳 ...

  8. python-聊聊反射

    反射 对于初学python可能较难理解,但反射是非常有用. 试想一下,当别的程序传入给你写的这段代码一个变量(var=“math”),这个变量是一个字符串,这个字符串是一个模块或者一个模块下的某个方法 ...

  9. Saiku如何固定查询结果table的表头和首列

    在使用saiku查询的时候,当“行”和“列”的维度内容过多时,在查看时只看到数据,不知道是什么数据,维度不清楚,得来回拖动滚动条才行,所以同事提出想要固定“表头”和“首列”. 在网上找了一些现成的插件 ...

  10. append与after区别

    append() & prepend()实在元素内插入内容(该内容变成该元素的子元素或节点),after() & before()是在元素的外面插入内容(其内容变成元素的兄弟节点).