00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <string.h>
00004
00005 #include "include/agent_file_data.h"
00006 #include <b64/cencode.h>
00007
00008 agent_file_data_p agent_file_data_New(void)
00009 {
00010 agent_file_data_p afd;
00011 afd = (agent_file_data_p)malloc(sizeof(agent_file_data_t));
00012 afd->name = NULL;
00013 afd->data = NULL;
00014 return afd;
00015 }
00016
00017 agent_file_data_p agent_file_data_NewWithData(const char* name, const char* data)
00018 {
00019 agent_file_data_p afd;
00020 afd = agent_file_data_New();
00021 afd->name = strdup(name);
00022 afd->data = strdup(data);
00023 return afd;
00024 }
00025
00026 agent_file_data_p agent_file_data_Copy(agent_file_data_p src)
00027 {
00028 agent_file_data_p afd;
00029 afd = (agent_file_data_p)malloc(sizeof(agent_file_data_t));
00030 if(src->name) {
00031 afd->name = strdup(src->name);
00032 } else {
00033 afd->name = NULL;
00034 }
00035 if(src->data) {
00036 strcpy(afd->data, src->data);
00037 } else {
00038 afd->data = NULL;
00039 }
00040 return afd;
00041 }
00042
00043 agent_file_data_p
00044 agent_file_data_InitializeFromFilename(const char* filename)
00045 {
00046 FILE* fp;
00047 long lSize;
00048 size_t result;
00049 char* buffer;
00050 agent_file_data_p afd;
00051 base64_encodestate estate;
00052 int codeSize;
00053
00054 fp = fopen(filename, "rb");
00055 if(fp == NULL) {
00056 return NULL;
00057 }
00058
00059
00060 fseek(fp, 0, SEEK_END);
00061 lSize = ftell(fp);
00062 rewind(fp);
00063
00064
00065 buffer = (char*)malloc(lSize * sizeof(char));
00066 result = fread(buffer, 1, lSize, fp);
00067 if(result != lSize) {
00068 free(buffer);
00069 return NULL;
00070 }
00071
00072
00073 base64_init_encodestate(&estate);
00074 afd = (agent_file_data_p)malloc(sizeof(agent_file_data_t));
00075 afd->name = strdup(filename);
00076 afd->data = (char*)malloc(lSize*2*sizeof(char));
00077 codeSize = base64_encode_block(buffer, lSize, afd->data, &estate);
00078 base64_encode_blockend(afd->data + codeSize, &estate);
00079 fclose(fp);
00080 return afd;
00081 }
00082
00083 agent_file_data_p
00084 agent_file_data_Encode(const char* name, void* data, int size)
00085 {
00086 return NULL;
00087 }
00088
00089 int agent_file_data_Destroy(agent_file_data_p agent_file_data)
00090 {
00091 if(agent_file_data->name) {
00092 free(agent_file_data->name);
00093 agent_file_data->name = NULL;
00094 }
00095 if(agent_file_data->data) {
00096 free(agent_file_data->data);
00097 }
00098 free(agent_file_data);
00099 return 0;
00100 }
00101
00102 int agent_file_data_CmpName(const void* key, void* element)
00103 {
00104 const char* name = (const char*)key;
00105 agent_file_data_p agent_file_data = (agent_file_data_t*)element;
00106 return strcmp(agent_file_data->name, name);
00107 }