http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/include/unzip.h ---------------------------------------------------------------------- diff --git a/deployment_admin/private/include/unzip.h b/deployment_admin/private/include/unzip.h deleted file mode 100644 index 3183968..0000000 --- a/deployment_admin/private/include/unzip.h +++ /dev/null @@ -1,437 +0,0 @@ -/* unzip.h -- IO for uncompress .zip files using zlib - Version 1.1, February 14h, 2010 - part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - - Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - - Modifications of Unzip for Zip64 - Copyright (C) 2007-2008 Even Rouault - - Modifications for Zip64 support on both zip and unzip - Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - - For more info read MiniZip_info.txt - - --------------------------------------------------------------------------------- - - Condition of use and distribution are the same than zlib : - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - --------------------------------------------------------------------------------- - - Changes - - See header of unzip64.c - -*/ - -#ifndef _unz64_H -#define _unz64_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _ZLIB_H -#include "zlib.h" -#endif - -#ifndef _ZLIBIOAPI_H -#include "ioapi.h" -#endif - -#ifdef HAVE_BZIP2 -#include "bzlib.h" -#endif - -#define Z_BZIP2ED 12 - -#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) -/* like the STRICT of WIN32, we define a pointer that cannot be converted - from (void*) without cast */ -typedef struct TagunzFile__ { int unused; } unzFile__; -typedef unzFile__ *unzFile; -#else -typedef voidp unzFile; -#endif - - -#define UNZ_OK (0) -#define UNZ_END_OF_LIST_OF_FILE (-100) -#define UNZ_ERRNO (Z_ERRNO) -#define UNZ_EOF (0) -#define UNZ_PARAMERROR (-102) -#define UNZ_BADZIPFILE (-103) -#define UNZ_INTERNALERROR (-104) -#define UNZ_CRCERROR (-105) - -/* tm_unz contain date/time info */ -typedef struct tm_unz_s -{ - uInt tm_sec; /* seconds after the minute - [0,59] */ - uInt tm_min; /* minutes after the hour - [0,59] */ - uInt tm_hour; /* hours since midnight - [0,23] */ - uInt tm_mday; /* day of the month - [1,31] */ - uInt tm_mon; /* months since January - [0,11] */ - uInt tm_year; /* years - [1980..2044] */ -} tm_unz; - -/* unz_global_info structure contain global data about the ZIPfile - These data comes from the end of central dir */ -typedef struct unz_global_info64_s -{ - ZPOS64_T number_entry; /* total number of entries in - the central dir on this disk */ - uLong size_comment; /* size of the global comment of the zipfile */ -} unz_global_info64; - -typedef struct unz_global_info_s -{ - uLong number_entry; /* total number of entries in - the central dir on this disk */ - uLong size_comment; /* size of the global comment of the zipfile */ -} unz_global_info; - -/* unz_file_info contain information about a file in the zipfile */ -typedef struct unz_file_info64_s -{ - uLong version; /* version made by 2 bytes */ - uLong version_needed; /* version needed to extract 2 bytes */ - uLong flag; /* general purpose bit flag 2 bytes */ - uLong compression_method; /* compression method 2 bytes */ - uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ - uLong crc; /* crc-32 4 bytes */ - ZPOS64_T compressed_size; /* compressed size 8 bytes */ - ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */ - uLong size_filename; /* filename length 2 bytes */ - uLong size_file_extra; /* extra field length 2 bytes */ - uLong size_file_comment; /* file comment length 2 bytes */ - - uLong disk_num_start; /* disk number start 2 bytes */ - uLong internal_fa; /* internal file attributes 2 bytes */ - uLong external_fa; /* external file attributes 4 bytes */ - - tm_unz tmu_date; -} unz_file_info64; - -typedef struct unz_file_info_s -{ - uLong version; /* version made by 2 bytes */ - uLong version_needed; /* version needed to extract 2 bytes */ - uLong flag; /* general purpose bit flag 2 bytes */ - uLong compression_method; /* compression method 2 bytes */ - uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ - uLong crc; /* crc-32 4 bytes */ - uLong compressed_size; /* compressed size 4 bytes */ - uLong uncompressed_size; /* uncompressed size 4 bytes */ - uLong size_filename; /* filename length 2 bytes */ - uLong size_file_extra; /* extra field length 2 bytes */ - uLong size_file_comment; /* file comment length 2 bytes */ - - uLong disk_num_start; /* disk number start 2 bytes */ - uLong internal_fa; /* internal file attributes 2 bytes */ - uLong external_fa; /* external file attributes 4 bytes */ - - tm_unz tmu_date; -} unz_file_info; - -extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, - const char* fileName2, - int iCaseSensitivity)); -/* - Compare two filename (fileName1,fileName2). - If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) - If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi - or strcasecmp) - If iCaseSenisivity = 0, case sensitivity is defaut of your operating system - (like 1 on Unix, 2 on Windows) -*/ - - -extern unzFile ZEXPORT unzOpen OF((const char *path)); -extern unzFile ZEXPORT unzOpen64 OF((const void *path)); -/* - Open a Zip file. path contain the full pathname (by example, - on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer - "zlib/zlib113.zip". - If the zipfile cannot be opened (file don't exist or in not valid), the - return value is NULL. - Else, the return value is a unzFile Handle, usable with other function - of this unzip package. - the "64" function take a const void* pointer, because the path is just the - value passed to the open64_file_func callback. - Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path - is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char* - does not describe the reality -*/ - - -extern unzFile ZEXPORT unzOpen2 OF((const char *path, - zlib_filefunc_def* pzlib_filefunc_def)); -/* - Open a Zip file, like unzOpen, but provide a set of file low level API - for read/write the zip file (see ioapi.h) -*/ - -extern unzFile ZEXPORT unzOpen2_64 OF((const void *path, - zlib_filefunc64_def* pzlib_filefunc_def)); -/* - Open a Zip file, like unz64Open, but provide a set of file low level API - for read/write the zip file (see ioapi.h) -*/ - -extern int ZEXPORT unzClose OF((unzFile file)); -/* - Close a ZipFile opened with unzipOpen. - If there is files inside the .Zip opened with unzOpenCurrentFile (see later), - these files MUST be closed with unzipCloseCurrentFile before call unzipClose. - return UNZ_OK if there is no problem. */ - -extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, - unz_global_info *pglobal_info)); - -extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file, - unz_global_info64 *pglobal_info)); -/* - Write info about the ZipFile in the *pglobal_info structure. - No preparation of the structure is needed - return UNZ_OK if there is no problem. */ - - -extern int ZEXPORT unzGetGlobalComment OF((unzFile file, - char *szComment, - uLong uSizeBuf)); -/* - Get the global comment string of the ZipFile, in the szComment buffer. - uSizeBuf is the size of the szComment buffer. - return the number of byte copied or an error code <0 -*/ - - -/***************************************************************************/ -/* Unzip package allow you browse the directory of the zipfile */ - -extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); -/* - Set the current file of the zipfile to the first file. - return UNZ_OK if there is no problem -*/ - -extern int ZEXPORT unzGoToNextFile OF((unzFile file)); -/* - Set the current file of the zipfile to the next file. - return UNZ_OK if there is no problem - return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. -*/ - -extern int ZEXPORT unzLocateFile OF((unzFile file, - const char *szFileName, - int iCaseSensitivity)); -/* - Try locate the file szFileName in the zipfile. - For the iCaseSensitivity signification, see unzStringFileNameCompare - - return value : - UNZ_OK if the file is found. It becomes the current file. - UNZ_END_OF_LIST_OF_FILE if the file is not found -*/ - - -/* ****************************************** */ -/* Ryan supplied functions */ -/* unz_file_info contain information about a file in the zipfile */ -typedef struct unz_file_pos_s -{ - uLong pos_in_zip_directory; /* offset in zip file directory */ - uLong num_of_file; /* # of file */ -} unz_file_pos; - -extern int ZEXPORT unzGetFilePos( - unzFile file, - unz_file_pos* file_pos); - -extern int ZEXPORT unzGoToFilePos( - unzFile file, - unz_file_pos* file_pos); - -typedef struct unz64_file_pos_s -{ - ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */ - ZPOS64_T num_of_file; /* # of file */ -} unz64_file_pos; - -extern int ZEXPORT unzGetFilePos64( - unzFile file, - unz64_file_pos* file_pos); - -extern int ZEXPORT unzGoToFilePos64( - unzFile file, - const unz64_file_pos* file_pos); - -/* ****************************************** */ - -extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file, - unz_file_info64 *pfile_info, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize)); - -extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, - unz_file_info *pfile_info, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize)); -/* - Get Info about the current file - if pfile_info!=NULL, the *pfile_info structure will contain somes info about - the current file - if szFileName!=NULL, the filemane string will be copied in szFileName - (fileNameBufferSize is the size of the buffer) - if extraField!=NULL, the extra field information will be copied in extraField - (extraFieldBufferSize is the size of the buffer). - This is the Central-header version of the extra field - if szComment!=NULL, the comment string of the file will be copied in szComment - (commentBufferSize is the size of the buffer) -*/ - - -/** Addition for GDAL : START */ - -extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file)); - -/** Addition for GDAL : END */ - - -/***************************************************************************/ -/* for reading the content of the current zipfile, you can open it, read data - from it, and close it (you can close it before reading all the file) - */ - -extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); -/* - Open for reading data the current file in the zipfile. - If there is no error, the return value is UNZ_OK. -*/ - -extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file, - const char* password)); -/* - Open for reading data the current file in the zipfile. - password is a crypting password - If there is no error, the return value is UNZ_OK. -*/ - -extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file, - int* method, - int* level, - int raw)); -/* - Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) - if raw==1 - *method will receive method of compression, *level will receive level of - compression - note : you can set level parameter as NULL (if you did not want known level, - but you CANNOT set method parameter as NULL -*/ - -extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file, - int* method, - int* level, - int raw, - const char* password)); -/* - Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) - if raw==1 - *method will receive method of compression, *level will receive level of - compression - note : you can set level parameter as NULL (if you did not want known level, - but you CANNOT set method parameter as NULL -*/ - - -extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); -/* - Close the file in zip opened with unzOpenCurrentFile - Return UNZ_CRCERROR if all the file was read but the CRC is not good -*/ - -extern int ZEXPORT unzReadCurrentFile OF((unzFile file, - voidp buf, - unsigned len)); -/* - Read bytes from the current file (opened by unzOpenCurrentFile) - buf contain buffer where data must be copied - len the size of buf. - - return the number of byte copied if somes bytes are copied - return 0 if the end of file was reached - return <0 with error code if there is an error - (UNZ_ERRNO for IO error, or zLib error for uncompress error) -*/ - -extern z_off_t ZEXPORT unztell OF((unzFile file)); - -extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file)); -/* - Give the current position in uncompressed data -*/ - -extern int ZEXPORT unzeof OF((unzFile file)); -/* - return 1 if the end of file was reached, 0 elsewhere -*/ - -extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, - voidp buf, - unsigned len)); -/* - Read extra field from the current file (opened by unzOpenCurrentFile) - This is the local-header version of the extra field (sometimes, there is - more info in the local-header version than in the central-header) - - if buf==NULL, it return the size of the local extra field - - if buf!=NULL, len is the size of the buffer, the extra header is copied in - buf. - the return value is the number of bytes copied in buf, or (if <0) - the error code -*/ - -/***************************************************************************/ - -/* Get the current file offset */ -extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file); -extern uLong ZEXPORT unzGetOffset (unzFile file); - -/* Set the current file offset */ -extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos); -extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); - - - -#ifdef __cplusplus -} -#endif - -#endif /* _unz64_H */
http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/src/deployment_admin.c ---------------------------------------------------------------------- diff --git a/deployment_admin/private/src/deployment_admin.c b/deployment_admin/private/src/deployment_admin.c deleted file mode 100644 index 17e78db..0000000 --- a/deployment_admin/private/src/deployment_admin.c +++ /dev/null @@ -1,809 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * deployment_admin.c - * - * \date Nov 7, 2011 - * \author <a href="mailto:[email protected]">Apache Celix Project Team</a> - * \copyright Apache License, Version 2.0 - */ - -#include <stddef.h> -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <stdint.h> - -#include <dirent.h> -#include <sys/types.h> -#include <sys/stat.h> - -#include <curl/curl.h> -#include <curl/easy.h> - -#include <uuid/uuid.h> - -#include "celixbool.h" -#include "deployment_admin.h" -#include "celix_errno.h" -#include "bundle_context.h" -#include "constants.h" -#include "deployment_package.h" -#include "bundle.h" -#include "utils.h" - -#include "log.h" -#include "log_store.h" -#include "log_sync.h" - -#include "resource_processor.h" -#include "miniunz.h" - -#define IDENTIFICATION_ID "deployment_admin_identification" -#define DEFAULT_IDENTIFICATION_ID "celix" - -#define ADMIN_URL "deployment_admin_url" -#define DEFAULT_ADMIN_URL "localhost:8080" - -#define DEPLOYMENT_CACHE_DIR "deployment_cache_dir" -#define DEPLOYMENT_TAGS "deployment_tags" -// "http://localhost:8080/deployment/" - -#define VERSIONS "/versions" - -static void* deploymentAdmin_poll(void *deploymentAdmin); -celix_status_t deploymentAdmin_download(deployment_admin_pt admin, char * url, char **inputFile); -size_t deploymentAdmin_writeData(void *ptr, size_t size, size_t nmemb, FILE *stream); -static celix_status_t deploymentAdmin_deleteTree(char * directory); -celix_status_t deploymentAdmin_readVersions(deployment_admin_pt admin, array_list_pt versions); - -celix_status_t deploymentAdmin_stopDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt target); -celix_status_t deploymentAdmin_updateDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source); -celix_status_t deploymentAdmin_startDeploymentPackageCustomizerBundles(deployment_admin_pt admin, deployment_package_pt source, deployment_package_pt target); -celix_status_t deploymentAdmin_processDeploymentPackageResources(deployment_admin_pt admin, deployment_package_pt source); -celix_status_t deploymentAdmin_dropDeploymentPackageResources(deployment_admin_pt admin, deployment_package_pt source, deployment_package_pt target); -celix_status_t deploymentAdmin_dropDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source, deployment_package_pt target); -celix_status_t deploymentAdmin_startDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source); - -static celix_status_t deploymentAdmin_performRequest(deployment_admin_pt admin, char* entry); -static celix_status_t deploymentAdmin_auditEventTargetPropertiesSet(deployment_admin_pt admin); -static celix_status_t deploymentAdmin_auditEventFrameworkStarted(deployment_admin_pt admin); - -celix_status_t deploymentAdmin_create(bundle_context_pt context, deployment_admin_pt *admin) { - celix_status_t status = CELIX_SUCCESS; - - *admin = calloc(1, sizeof(**admin)); - if (!*admin) { - status = CELIX_ENOMEM; - } else { - (*admin)->running = true; - (*admin)->context = context; - (*admin)->current = NULL; - (*admin)->packages = hashMap_create(utils_stringHash, NULL, utils_stringEquals, NULL); - (*admin)->targetIdentification = NULL; - (*admin)->pollUrl = NULL; - (*admin)->auditlogUrl = NULL; - - bundleContext_getProperty(context, IDENTIFICATION_ID, (const char**) &(*admin)->targetIdentification); - if ((*admin)->targetIdentification == NULL) { - (*admin)->targetIdentification = DEFAULT_IDENTIFICATION_ID; - fw_log(logger, OSGI_FRAMEWORK_LOG_INFO, "Identification ID not set, using default '%s'. Set id by using '%s'", - DEFAULT_IDENTIFICATION_ID, IDENTIFICATION_ID); - } - - struct timeval tv; - gettimeofday(&tv,NULL); - (*admin)->auditlogId = tv.tv_sec*(uint64_t)1000000+tv.tv_usec; - (*admin)->aditlogSeqNr = 0; - - if ((*admin)->targetIdentification == NULL ) { - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Target name must be set using \"deployment_admin_identification\""); - } else { - const char *url = NULL; - bundleContext_getProperty(context, ADMIN_URL, &url); - if (url == NULL) { - url = DEFAULT_ADMIN_URL; - fw_log(logger, OSGI_FRAMEWORK_LOG_INFO, "Server URL is not set, using default '%s'. Set id by using '%s'", - DEFAULT_ADMIN_URL, ADMIN_URL); - } - - int pollUrlLength = strlen(url) + strlen((*admin)->targetIdentification) + strlen(VERSIONS) + 13; - int auditlogUrlLength = strlen(url) + 10; - - char pollUrl[pollUrlLength]; - char auditlogUrl[auditlogUrlLength]; - - snprintf(pollUrl, pollUrlLength, "%s/deployment/%s%s", url, (*admin)->targetIdentification, VERSIONS); - snprintf(auditlogUrl, auditlogUrlLength, "%s/auditlog", url); - - (*admin)->pollUrl = strdup(pollUrl); - (*admin)->auditlogUrl = strdup(auditlogUrl); - -// log_store_pt store = NULL; -// log_pt log = NULL; -// log_sync_pt sync = NULL; -// logStore_create(subpool, &store); -// log_create(subpool, store, &log); -// logSync_create(subpool, (*admin)->targetIdentification, store, &sync); -// -// log_log(log, 20000, NULL); - - - celixThread_create(&(*admin)->poller, NULL, deploymentAdmin_poll, *admin); - } - } - - return status; -} - - - -celix_status_t deploymentAdmin_destroy(deployment_admin_pt admin) { - celix_status_t status = CELIX_SUCCESS; - - admin->running = false; - - celixThread_join(admin->poller, NULL); - - hash_map_iterator_pt iter = hashMapIterator_create(admin->packages); - - while (hashMapIterator_hasNext(iter)) { - deployment_package_pt target = (deployment_package_pt) hashMapIterator_nextValue(iter); - deploymentPackage_destroy(target); - } - - hashMapIterator_destroy(iter); - - hashMap_destroy(admin->packages, false, false); - - if (admin->current != NULL) { - free(admin->current); - } - - free(admin->pollUrl); - free(admin->auditlogUrl); - - free(admin); - - return status; -} - - -static celix_status_t deploymentAdmin_performRequest(deployment_admin_pt admin, char* entry) { - celix_status_t status = CELIX_SUCCESS; - - CURL *curl; - CURLcode res; - curl = curl_easy_init(); - - if (!curl) { - status = CELIX_BUNDLE_EXCEPTION; - - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Error initializing curl."); - } - - char url[strlen(admin->auditlogUrl)+6]; - sprintf(url, "%s/send", admin->auditlogUrl); - - if (status == CELIX_SUCCESS) { - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - curl_easy_setopt(curl, CURLOPT_URL, url); - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, entry); - res = curl_easy_perform(curl); - - if (res != CURLE_OK ) { - status = CELIX_BUNDLE_EXCEPTION; - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Error sending auditlog, got curl error code %d", res); - } - } - - return status; -} - -static celix_status_t deploymentAdmin_auditEventTargetPropertiesSet(deployment_admin_pt admin) { - celix_status_t status = CELIX_SUCCESS; - - const char *tags = NULL; - - bundleContext_getProperty(admin->context, DEPLOYMENT_TAGS, &tags); - - if (tags != NULL) { - char entry[512]; - int entrySize = 0; - - entrySize = snprintf(entry, 512, "%s,%llu,%u,0,%i,%s\n", admin->targetIdentification, admin->auditlogId, admin->aditlogSeqNr++, DEPLOYMENT_ADMIN_AUDIT_EVENT__TARGETPROPERTIES_SET, tags); - - if (entrySize >= 512) { - status = CELIX_BUNDLE_EXCEPTION; - } - else { - status = deploymentAdmin_performRequest(admin, entry); - } - } - - return status; -} - -static celix_status_t deploymentAdmin_auditEventFrameworkStarted(deployment_admin_pt admin) { - celix_status_t status = CELIX_SUCCESS; - - char entry[512]; - int entrySize = 0; - - entrySize = snprintf(entry, 512, "%s,%llu,%u,0,%i\n", admin->targetIdentification, admin->auditlogId, admin->aditlogSeqNr++, DEPLOYMENT_ADMIN_AUDIT_EVENT__FRAMEWORK_STARTED); - - if (entrySize >= 512) { - status = CELIX_BUNDLE_EXCEPTION; - } - else { - status = deploymentAdmin_performRequest(admin, entry); - } - - return status; -} - - -static void *deploymentAdmin_poll(void *deploymentAdmin) { - deployment_admin_pt admin = deploymentAdmin; - - /*first poll send framework started audit event, note this will register the target in Apache ACE*/ - deploymentAdmin_auditEventFrameworkStarted(admin); - deploymentAdmin_auditEventTargetPropertiesSet(admin); - - while (admin->running) { - int i; - - //poll ace - array_list_pt versions = NULL; - arrayList_create(&versions); - - deploymentAdmin_readVersions(admin, versions); - - char *last = arrayList_get(versions, arrayList_size(versions) - 1); - - if (last != NULL) { - if (admin->current == NULL || strcmp(last, admin->current) != 0) { - int length = strlen(admin->pollUrl) + strlen(last) + 2; - char request[length]; - - // TODO - // We do not yet support fix packages - // Check string lenght! - // snprintf(request, length, "%s/%s?current=%s", admin->pollUrl, last, admin->current); - snprintf(request, length, "%s/%s", admin->pollUrl, last); - - char *inputFilename = NULL; - celix_status_t status = deploymentAdmin_download(admin ,request, &inputFilename); - if (status == CELIX_SUCCESS) { - bundle_pt bundle = NULL; - bundleContext_getBundle(admin->context, &bundle); - char *entry = NULL; - bundle_getEntry(bundle, "/", &entry); - - // Handle file - char tmpDir[256]; - char uuid[37]; - uuid_t uid; - uuid_generate(uid); - uuid_unparse(uid, uuid); - snprintf(tmpDir, 256, "%s%s", entry, uuid); - if( mkdir(tmpDir, S_IRWXU) == -1){ - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Failed creating directory %s",tmpDir); - } - - // TODO: update to use bundle cache DataFile instead of module entries. - unzip_extractDeploymentPackage(inputFilename, tmpDir); - int length = strlen(tmpDir) + 22; - char manifest[length]; - snprintf(manifest, length, "%s/META-INF/MANIFEST.MF", tmpDir); - manifest_pt mf = NULL; - manifest_createFromFile(manifest, &mf); - deployment_package_pt source = NULL; - deploymentPackage_create(admin->context, mf, &source); - const char *name = NULL; - deploymentPackage_getName(source, &name); - - int repoDirLength = strlen(entry) + 5; - char repoDir[repoDirLength]; - snprintf(repoDir, repoDirLength, "%srepo", entry); - if( mkdir(repoDir, S_IRWXU) == -1){ - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Failed creating directory %s",repoDir); - } - - int repoCacheLength = strlen(entry) + strlen(name) + 6; - char repoCache[repoCacheLength]; - snprintf(repoCache, repoCacheLength, "%srepo/%s", entry, name); - deploymentAdmin_deleteTree(repoCache); - int stat = rename(tmpDir, repoCache); - if (stat != 0) { - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "No success"); - } - - deployment_package_pt target = hashMap_get(admin->packages, name); - if (target == NULL) { -// target = empty package - } - - deploymentAdmin_stopDeploymentPackageBundles(admin, target); - deploymentAdmin_updateDeploymentPackageBundles(admin, source); - deploymentAdmin_startDeploymentPackageCustomizerBundles(admin, source, target); - deploymentAdmin_processDeploymentPackageResources(admin, source); - deploymentAdmin_dropDeploymentPackageResources(admin, source, target); - deploymentAdmin_dropDeploymentPackageBundles(admin, source, target); - deploymentAdmin_startDeploymentPackageBundles(admin, source); - - deploymentAdmin_deleteTree(repoCache); - deploymentAdmin_deleteTree(tmpDir); - if( remove(inputFilename) == -1){ - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Remove of %s failed",inputFilename); - } - admin->current = strdup(last); - hashMap_put(admin->packages, (char*)name, source); - - free(entry); - } - if (inputFilename != NULL) { - free(inputFilename); - } - } - } - - sleep(5); - - for (i = arrayList_size(versions); i > 0; --i) { - free(arrayList_remove(versions, 0)); - } - - arrayList_destroy(versions); - } - - return NULL; -} - -struct MemoryStruct { - char *memory; - size_t size; -}; - -size_t deploymentAdmin_parseVersions(void *contents, size_t size, size_t nmemb, void *userp) { - size_t realsize = size * nmemb; - struct MemoryStruct *mem = (struct MemoryStruct *)userp; - - mem->memory = realloc(mem->memory, mem->size + realsize + 1); - if (mem->memory == NULL) { - /* out of memory! */ - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "not enough memory (realloc returned NULL)"); - exit(EXIT_FAILURE); - } - - memcpy(&(mem->memory[mem->size]), contents, realsize); - mem->size += realsize; - mem->memory[mem->size] = 0; - - return realsize; -} - -celix_status_t deploymentAdmin_readVersions(deployment_admin_pt admin, array_list_pt versions) { - celix_status_t status = CELIX_SUCCESS; - - CURL *curl; - CURLcode res; - curl = curl_easy_init(); - struct MemoryStruct chunk; - chunk.memory = calloc(1, sizeof(char)); - chunk.size = 0; - if (curl) { - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - curl_easy_setopt(curl, CURLOPT_URL, admin->pollUrl); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, deploymentAdmin_parseVersions); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &chunk); - curl_easy_setopt(curl, CURLOPT_FAILONERROR, true); - res = curl_easy_perform(curl); - if (res != CURLE_OK) { - status = CELIX_BUNDLE_EXCEPTION; - } - /* always cleanup */ - curl_easy_cleanup(curl); - - char *last; - char *token = strtok_r(chunk.memory, "\n", &last); - while (token != NULL) { - arrayList_add(versions, strdup(token)); - token = strtok_r(NULL, "\n", &last); - } - } - - if (chunk.memory) { - free(chunk.memory); - } - - return status; -} - - -celix_status_t deploymentAdmin_download(deployment_admin_pt admin, char * url, char **inputFile) { - celix_status_t status = CELIX_SUCCESS; - CURL *curl = NULL; - CURLcode res = 0; - curl = curl_easy_init(); - if (curl) { - const char *dir = NULL; - bundleContext_getProperty(admin->context, DEPLOYMENT_CACHE_DIR, &dir); - if (dir != NULL) { - *inputFile = calloc(1024, sizeof (char)); - snprintf(*inputFile, 1024, "%s/%s", dir, "updateXXXXXX"); - } - else { - *inputFile = strdup("updateXXXXXX"); - } - umask(0011); - int fd = mkstemp(*inputFile); - if (fd != -1) { - FILE *fp = fopen(*inputFile, "wb+"); - if(fp!=NULL){ - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - curl_easy_setopt(curl, CURLOPT_URL, url); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, deploymentAdmin_writeData); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); - curl_easy_setopt(curl, CURLOPT_FAILONERROR, true); - //curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); - //curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, updateCommand_downloadProgress); - res = curl_easy_perform(curl); - - /* always cleanup */ - curl_easy_cleanup(curl); - fclose(fp); - } - else{ - status = CELIX_FILE_IO_EXCEPTION; - } - } - else{ - status = CELIX_FILE_IO_EXCEPTION; - } - } - else{ - res = CURLE_FAILED_INIT; - } - - if (res != CURLE_OK) { - *inputFile[0] = '\0'; - status = CELIX_ILLEGAL_STATE; - } - - return status; -} - -size_t deploymentAdmin_writeData(void *ptr, size_t size, size_t nmemb, FILE *stream) { - size_t written = fwrite(ptr, size, nmemb, stream); - return written; -} - - -static celix_status_t deploymentAdmin_deleteTree(char * directory) { - DIR *dir; - celix_status_t status = CELIX_SUCCESS; - dir = opendir(directory); - if (dir == NULL) { - status = CELIX_FILE_IO_EXCEPTION; - } else { - - struct dirent* dent = NULL; - - errno = 0; - dent = readdir(dir); - while (errno == 0 && dent != NULL) { - if ((strcmp((dent->d_name), ".") != 0) && (strcmp((dent->d_name), "..") != 0)) { - char subdir[512]; - snprintf(subdir, sizeof(subdir), "%s/%s", directory, dent->d_name); - - if (dent->d_type == DT_DIR) { - status = deploymentAdmin_deleteTree(subdir); - } else { - if (remove(subdir) != 0) { - status = CELIX_FILE_IO_EXCEPTION; - break; - } - } - } - - errno = 0; - dent = readdir(dir); - } - - if (errno != 0) { - status = CELIX_FILE_IO_EXCEPTION; - } else if (closedir(dir) != 0) { - status = CELIX_FILE_IO_EXCEPTION; - } else if (rmdir(directory) != 0) { - status = CELIX_FILE_IO_EXCEPTION; - } - } - - framework_logIfError(logger, status, NULL, "Failed to delete tree"); - - return status; -} - -celix_status_t deploymentAdmin_stopDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt target) { - celix_status_t status = CELIX_SUCCESS; - - if (target != NULL) { - array_list_pt infos = NULL; - deploymentPackage_getBundleInfos(target, &infos); - int i; - for (i = 0; i < arrayList_size(infos); i++) { - bundle_pt bundle = NULL; - bundle_info_pt info = arrayList_get(infos, i); - deploymentPackage_getBundle(target, info->symbolicName, &bundle); - if (bundle != NULL) { - bundle_stop(bundle); - } else { - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "DEPLOYMENT_ADMIN: Bundle %s not found", info->symbolicName); - } - } - arrayList_destroy(infos); - } - - return status; -} - -celix_status_t deploymentAdmin_updateDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source) { - celix_status_t status = CELIX_SUCCESS; - - array_list_pt infos = NULL; - deploymentPackage_getBundleInfos(source, &infos); - int i; - for (i = 0; i < arrayList_size(infos); i++) { - bundle_pt bundle = NULL; - bundle_info_pt info = arrayList_get(infos, i); - - bundleContext_getBundle(admin->context, &bundle); - char *entry = NULL; - bundle_getEntry(bundle, "/", &entry); - const char *name = NULL; - deploymentPackage_getName(source, &name); - - int bundlePathLength = strlen(entry) + strlen(name) + strlen(info->path) + 7; - int bsnLength = strlen(info->symbolicName) + 9; - - char bundlePath[bundlePathLength]; - snprintf(bundlePath, bundlePathLength, "%srepo/%s/%s", entry, name, info->path); - - char bsn[bsnLength]; - snprintf(bsn, bsnLength, "osgi-dp:%s", info->symbolicName); - - bundle_pt updateBundle = NULL; - deploymentPackage_getBundle(source, info->symbolicName, &updateBundle); - if (updateBundle != NULL) { - //printf("Update bundle from: %s\n", bundlePath); - bundle_update(updateBundle, bundlePath); - } else { - //printf("Install bundle from: %s\n", bundlePath); - bundleContext_installBundle2(admin->context, bsn, bundlePath, &updateBundle); - } - - free(entry); - } - arrayList_destroy(infos); - return status; -} - -celix_status_t deploymentAdmin_startDeploymentPackageCustomizerBundles(deployment_admin_pt admin, deployment_package_pt source, deployment_package_pt target) { - celix_status_t status = CELIX_SUCCESS; - - array_list_pt bundles = NULL; - array_list_pt sourceInfos = NULL; - - arrayList_create(&bundles); - - deploymentPackage_getBundleInfos(source, &sourceInfos); - int i; - for (i = 0; i < arrayList_size(sourceInfos); i++) { - bundle_info_pt sourceInfo = arrayList_get(sourceInfos, i); - if (sourceInfo->customizer) { - bundle_pt bundle = NULL; - deploymentPackage_getBundle(source, sourceInfo->symbolicName, &bundle); - if (bundle != NULL) { - arrayList_add(bundles, bundle); - } - } - } - arrayList_destroy(sourceInfos); - - if (target != NULL) { - array_list_pt targetInfos = NULL; - deploymentPackage_getBundleInfos(target, &targetInfos); - for (i = 0; i < arrayList_size(targetInfos); i++) { - bundle_info_pt targetInfo = arrayList_get(targetInfos, i); - if (targetInfo->customizer) { - bundle_pt bundle = NULL; - deploymentPackage_getBundle(target, targetInfo->symbolicName, &bundle); - if (bundle != NULL) { - arrayList_add(bundles, bundle); - } - } - } - arrayList_destroy(targetInfos); - } - - for (i = 0; i < arrayList_size(bundles); i++) { - bundle_pt bundle = arrayList_get(bundles, i); - bundle_start(bundle); - } - - arrayList_destroy(bundles); - - return status; -} - -celix_status_t deploymentAdmin_processDeploymentPackageResources(deployment_admin_pt admin, deployment_package_pt source) { - celix_status_t status = CELIX_SUCCESS; - - array_list_pt infos = NULL; - deploymentPackage_getResourceInfos(source, &infos); - int i; - for (i = 0; i < arrayList_size(infos); i++) { - resource_info_pt info = arrayList_get(infos, i); - array_list_pt services = NULL; - int length = strlen(OSGI_FRAMEWORK_SERVICE_PID) + strlen(info->resourceProcessor) + 4; - char filter[length]; - - snprintf(filter, length, "(%s=%s)", OSGI_FRAMEWORK_SERVICE_PID, info->resourceProcessor); - - status = bundleContext_getServiceReferences(admin->context, DEPLOYMENTADMIN_RESOURCE_PROCESSOR_SERVICE, filter, &services); - if (status == CELIX_SUCCESS) { - if (services != NULL && arrayList_size(services) > 0) { - service_reference_pt ref = arrayList_get(services, 0); - // In Felix a check is done to assure the processor belongs to the deployment package - // Is this according to spec? - void *processorP = NULL; - status = bundleContext_getService(admin->context, ref, &processorP); - if (status == CELIX_SUCCESS) { - bundle_pt bundle = NULL; - char *entry = NULL; - const char *name = NULL; - const char *packageName = NULL; - resource_processor_service_pt processor = processorP; - - bundleContext_getBundle(admin->context, &bundle); - bundle_getEntry(bundle, "/", &entry); - deploymentPackage_getName(source, &name); - - int length = strlen(entry) + strlen(name) + strlen(info->path) + 7; - char resourcePath[length]; - snprintf(resourcePath, length, "%srepo/%s/%s", entry, name, info->path); - deploymentPackage_getName(source, &packageName); - - processor->begin(processor->processor, (char*)packageName); - processor->process(processor->processor, info->path, resourcePath); - - free(entry); - } - } - } - - if(services != NULL) { - arrayList_destroy(services); - } - } - - arrayList_destroy(infos); - - - return status; -} - -celix_status_t deploymentAdmin_dropDeploymentPackageResources(deployment_admin_pt admin, deployment_package_pt source, deployment_package_pt target) { - celix_status_t status = CELIX_SUCCESS; - - if (target != NULL) { - array_list_pt infos = NULL; - deploymentPackage_getResourceInfos(target, &infos); - int i; - for (i = 0; i < arrayList_size(infos); i++) { - resource_info_pt info = arrayList_get(infos, i); - resource_info_pt sourceInfo = NULL; - deploymentPackage_getResourceInfoByPath(source, info->path, &sourceInfo); - if (sourceInfo == NULL) { - array_list_pt services = NULL; - int length = strlen(OSGI_FRAMEWORK_SERVICE_PID) + strlen(info->resourceProcessor) + 4; - char filter[length]; - - snprintf(filter, length, "(%s=%s)", OSGI_FRAMEWORK_SERVICE_PID, info->resourceProcessor); - status = bundleContext_getServiceReferences(admin->context, DEPLOYMENTADMIN_RESOURCE_PROCESSOR_SERVICE, filter, &services); - if (status == CELIX_SUCCESS) { - if (services != NULL && arrayList_size(services) > 0) { - service_reference_pt ref = arrayList_get(services, 0); - // In Felix a check is done to assure the processor belongs to the deployment package - // Is this according to spec? - void *processorP = NULL; - status = bundleContext_getService(admin->context, ref, &processorP); - if (status == CELIX_SUCCESS) { - const char *packageName = NULL; - resource_processor_service_pt processor = processorP; - - deploymentPackage_getName(source, &packageName); - processor->begin(processor->processor, (char*)packageName); - processor->dropped(processor->processor, info->path); - } - } - } - - if (services != NULL) { - arrayList_destroy(services); - } - - } - } - - arrayList_destroy(infos); - } - - return status; -} - -celix_status_t deploymentAdmin_dropDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source, deployment_package_pt target) { - celix_status_t status = CELIX_SUCCESS; - - if (target != NULL) { - array_list_pt targetInfos = NULL; - deploymentPackage_getBundleInfos(target, &targetInfos); - int i; - for (i = 0; i < arrayList_size(targetInfos); i++) { - bundle_info_pt targetInfo = arrayList_get(targetInfos, i); - if (!targetInfo->customizer) { - bundle_info_pt info = NULL; - deploymentPackage_getBundleInfoByName(source, targetInfo->symbolicName, &info); - if (info == NULL) { - bundle_pt bundle = NULL; - deploymentPackage_getBundle(target, targetInfo->symbolicName, &bundle); - bundle_uninstall(bundle); - } - } - } - arrayList_destroy(targetInfos); - } - - return status; -} - -celix_status_t deploymentAdmin_startDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source) { - celix_status_t status = CELIX_SUCCESS; - - array_list_pt infos = NULL; - deploymentPackage_getBundleInfos(source, &infos); - int i; - for (i = 0; i < arrayList_size(infos); i++) { - bundle_pt bundle = NULL; - bundle_info_pt info = arrayList_get(infos, i); - if (!info->customizer) { - deploymentPackage_getBundle(source, info->symbolicName, &bundle); - if (bundle != NULL) { - bundle_start(bundle); - } else { - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "DEPLOYMENT_ADMIN: Could not start bundle %s", info->symbolicName); - } - } - } - arrayList_destroy(infos); - - return status; -} http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/src/deployment_admin_activator.c ---------------------------------------------------------------------- diff --git a/deployment_admin/private/src/deployment_admin_activator.c b/deployment_admin/private/src/deployment_admin_activator.c deleted file mode 100644 index 93fd6b5..0000000 --- a/deployment_admin/private/src/deployment_admin_activator.c +++ /dev/null @@ -1,78 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * deployment_admin_activator.c - * - * \date Nov 7, 2011 - * \author <a href="mailto:[email protected]">Apache Celix Project Team</a> - * \copyright Apache License, Version 2.0 - */ -#include <stdlib.h> - -#include "bundle_activator.h" -#include "deployment_admin.h" - -struct bundle_activator { - deployment_admin_pt admin; -}; - -typedef struct bundle_activator* bundle_activator_pt; - -celix_status_t bundleActivator_create(bundle_context_pt context, void **userData) { - celix_status_t status = CELIX_SUCCESS; - - bundle_activator_pt activator = NULL; - - activator = calloc(1, sizeof(*activator)); - if (!activator) { - status = CELIX_ENOMEM; - } else { - status = deploymentAdmin_create(context, &activator->admin); - - *userData = activator; - } - - return status; -} - -celix_status_t bundleActivator_start(void * userData, bundle_context_pt context) { - celix_status_t status = CELIX_SUCCESS; - - return status; -} - -celix_status_t bundleActivator_stop(void * userData, bundle_context_pt context) { - celix_status_t status = CELIX_SUCCESS; - - return status; -} - -celix_status_t bundleActivator_destroy(void * userData, bundle_context_pt context) { - celix_status_t status; - - bundle_activator_pt activator = (bundle_activator_pt) userData; - - status = deploymentAdmin_destroy(activator->admin); - - free(activator); - - return status; -} - - http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/src/deployment_package.c ---------------------------------------------------------------------- diff --git a/deployment_admin/private/src/deployment_package.c b/deployment_admin/private/src/deployment_package.c deleted file mode 100644 index 1520db8..0000000 --- a/deployment_admin/private/src/deployment_package.c +++ /dev/null @@ -1,219 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * deployment_package.c - * - * \date Nov 8, 2011 - * \author <a href="mailto:[email protected]">Apache Celix Project Team</a> - * \copyright Apache License, Version 2.0 - */ -#include <stdlib.h> -#include <string.h> - -#include "celix_errno.h" - -#include "deployment_package.h" -#include "constants.h" -#include "utils.h" -#include "bundle_context.h" -#include "module.h" -#include "bundle.h" - -static const char * const RESOURCE_PROCESSOR = "Resource-Processor"; -static const char * const DEPLOYMENTPACKAGE_CUSTOMIZER = "DeploymentPackage-Customizer"; - -celix_status_t deploymentPackage_processEntries(deployment_package_pt package); -static celix_status_t deploymentPackage_isBundleResource(properties_pt attributes, bool *isBundleResource); -static celix_status_t deploymentPackage_parseBooleanHeader(const char *value, bool *boolValue); - -celix_status_t deploymentPackage_create(bundle_context_pt context, manifest_pt manifest, deployment_package_pt *package) { - celix_status_t status = CELIX_SUCCESS; - - *package = calloc(1, sizeof(**package)); - if (!(*package)) { - status = CELIX_ENOMEM; - } else { - (*package)->context = context; - (*package)->manifest = manifest; - (*package)->bundleInfos = NULL; - (*package)->resourceInfos = NULL; - (*package)->nameToBundleInfo = hashMap_create(utils_stringHash, NULL, utils_stringEquals, NULL); - (*package)->pathToEntry = hashMap_create(utils_stringHash, NULL, utils_stringEquals, NULL); - status = arrayList_create(&(*package)->bundleInfos); - if (status == CELIX_SUCCESS) { - status = arrayList_create(&(*package)->resourceInfos); - if (status == CELIX_SUCCESS) { - status = deploymentPackage_processEntries(*package); - if (status == CELIX_SUCCESS) { - int i; - for (i = 0; i < arrayList_size((*package)->bundleInfos); i++) { - bundle_info_pt info = arrayList_get((*package)->bundleInfos, i); - hashMap_put((*package)->nameToBundleInfo, info->symbolicName, info); - } - for (i = 0; i < arrayList_size((*package)->resourceInfos); i++) { - resource_info_pt info = arrayList_get((*package)->resourceInfos, i); - hashMap_put((*package)->pathToEntry, info->path, info); - } - } - } - } - } - - return status; -} - -celix_status_t deploymentPackage_destroy(deployment_package_pt package) { - celix_status_t status = CELIX_SUCCESS; - int i; - - - manifest_destroy(package->manifest); - - hashMap_destroy(package->nameToBundleInfo, false, false); - hashMap_destroy(package->pathToEntry, false, false); - - - for(i = arrayList_size(package->bundleInfos); i > 0; --i) { - free(arrayList_remove(package->bundleInfos, 0)); - } - - arrayList_destroy(package->bundleInfos); - - for (i = arrayList_size(package->resourceInfos); i > 0; --i) { - free(arrayList_remove(package->resourceInfos, 0)); - } - - - arrayList_destroy(package->resourceInfos); - - free(package); - - return status; -} - -celix_status_t deploymentPackage_getName(deployment_package_pt package, const char **name) { - *name = manifest_getValue(package->manifest, "DeploymentPackage-SymbolicName"); - return CELIX_SUCCESS; -} - -celix_status_t deploymentPackage_getBundleInfos(deployment_package_pt package, array_list_pt *infos) { - *infos = arrayList_clone(package->bundleInfos); - return CELIX_SUCCESS; -} - -celix_status_t deploymentPackage_getBundleInfoByName(deployment_package_pt package, const char *name, bundle_info_pt *info) { - *info = hashMap_get(package->nameToBundleInfo, name); - return CELIX_SUCCESS; -} - -celix_status_t deploymentPackage_getBundle(deployment_package_pt package, const char *name, bundle_pt *bundle) { - if (hashMap_containsKey(package->nameToBundleInfo, name)) { - array_list_pt bundles = NULL; - bundleContext_getBundles(package->context, &bundles); - int i; - for (i = 0; i < arrayList_size(bundles); i++) { - bundle_pt ibundle = arrayList_get(bundles, i); - module_pt module = NULL; - bundle_getCurrentModule(ibundle, &module); - const char *bsn = NULL; - module_getSymbolicName(module, &bsn); - if (strcmp(bsn, name) == 0) { - *bundle = ibundle; - break; - } - } - - arrayList_destroy(bundles); - } - - return CELIX_SUCCESS; -} - -celix_status_t deploymentPackage_getResourceInfos(deployment_package_pt package, array_list_pt *infos) { - *infos = arrayList_clone(package->resourceInfos); - return CELIX_SUCCESS; -} - -celix_status_t deploymentPackage_getResourceInfoByPath(deployment_package_pt package, const char *path, resource_info_pt *info) { - *info = hashMap_get(package->pathToEntry, path); - return CELIX_SUCCESS; -} - -celix_status_t deploymentPackage_getVersion(deployment_package_pt package, version_pt *version) { - const char *versionStr = manifest_getValue(package->manifest, "DeploymentPackage-Version"); - return version_createVersionFromString(versionStr, version); -} - -celix_status_t deploymentPackage_processEntries(deployment_package_pt package) { - celix_status_t status = CELIX_SUCCESS; - - hash_map_pt entries = NULL; - manifest_getEntries(package->manifest, &entries); - hash_map_iterator_pt iter = hashMapIterator_create(entries); - while (hashMapIterator_hasNext(iter)) { - hash_map_entry_pt entry = hashMapIterator_nextEntry(iter); - char *name = hashMapEntry_getKey(entry); - properties_pt values = hashMapEntry_getValue(entry); - - bool isBundleResource; - deploymentPackage_isBundleResource(values, &isBundleResource); - if (isBundleResource) { - bundle_info_pt info = calloc(1, sizeof(*info)); - info->path = name; - info->attributes = values; - info->symbolicName = (char*)properties_get(values, OSGI_FRAMEWORK_BUNDLE_SYMBOLICNAME); - const char *version = properties_get(values, OSGI_FRAMEWORK_BUNDLE_VERSION); - info->version = NULL; - status = version_createVersionFromString((char*)version, &info->version); - const char *customizer = properties_get(values, DEPLOYMENTPACKAGE_CUSTOMIZER); - deploymentPackage_parseBooleanHeader((char*)customizer, &info->customizer); - - arrayList_add(package->bundleInfos, info); - } else { - resource_info_pt info = calloc(1, sizeof(*info)); - info->path = name; - info->attributes = values; - info->resourceProcessor = (char*)properties_get(values,RESOURCE_PROCESSOR); - - arrayList_add(package->resourceInfos, info); - } - } - hashMapIterator_destroy(iter); - - return status; -} - -static celix_status_t deploymentPackage_isBundleResource(properties_pt attributes, bool *isBundleResource) { - *isBundleResource = properties_get(attributes, (char *) OSGI_FRAMEWORK_BUNDLE_SYMBOLICNAME) != NULL; - return CELIX_SUCCESS; -} - -static celix_status_t deploymentPackage_parseBooleanHeader(const char *value, bool *boolValue) { - *boolValue = false; - if (value != NULL) { - if (strcmp(value, "true") == 0) { - *boolValue = true; - } else { - *boolValue = false; - } - } - return CELIX_SUCCESS; -} - - http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/src/ioapi.c ---------------------------------------------------------------------- diff --git a/deployment_admin/private/src/ioapi.c b/deployment_admin/private/src/ioapi.c deleted file mode 100644 index 49958f6..0000000 --- a/deployment_admin/private/src/ioapi.c +++ /dev/null @@ -1,235 +0,0 @@ -/* ioapi.h -- IO base function header for compress/uncompress .zip - part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - - Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - - Modifications for Zip64 support - Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - - For more info read MiniZip_info.txt - -*/ - -#if (defined(_WIN32)) - #define _CRT_SECURE_NO_WARNINGS -#endif - -#include "ioapi.h" - -voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode) -{ - if (pfilefunc->zfile_func64.zopen64_file != NULL) - return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode); - else - { - return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode); - } -} - -long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) -{ - if (pfilefunc->zfile_func64.zseek64_file != NULL) - return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin); - else - { - uLong offsetTruncated = (uLong)offset; - if (offsetTruncated != offset) - return -1; - else - return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin); - } -} - -ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream) -{ - if (pfilefunc->zfile_func64.zseek64_file != NULL) - return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); - else - { - uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); - if ((tell_uLong) == ((uLong)-1)) - return (ZPOS64_T)-1; - else - return tell_uLong; - } -} - -void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32) -{ - p_filefunc64_32->zfile_func64.zopen64_file = NULL; - p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file; - p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; - p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file; - p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file; - p_filefunc64_32->zfile_func64.ztell64_file = NULL; - p_filefunc64_32->zfile_func64.zseek64_file = NULL; - p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file; - p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; - p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; - p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; - p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; -} - - - -static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode)); -static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); -static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size)); -static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream)); -static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); -static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream)); -static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream)); - -static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) -{ - FILE* file = NULL; - const char* mode_fopen = NULL; - if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) - mode_fopen = "rb"; - else - if (mode & ZLIB_FILEFUNC_MODE_EXISTING) - mode_fopen = "r+b"; - else - if (mode & ZLIB_FILEFUNC_MODE_CREATE) - mode_fopen = "wb"; - - if ((filename!=NULL) && (mode_fopen != NULL)) - file = fopen(filename, mode_fopen); - return file; -} - -static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) -{ - FILE* file = NULL; - const char* mode_fopen = NULL; - if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) - mode_fopen = "rb"; - else - if (mode & ZLIB_FILEFUNC_MODE_EXISTING) - mode_fopen = "r+b"; - else - if (mode & ZLIB_FILEFUNC_MODE_CREATE) - mode_fopen = "wb"; - - if ((filename!=NULL) && (mode_fopen != NULL)) - file = fopen64((const char*)filename, mode_fopen); - return file; -} - - -static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) -{ - uLong ret; - ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); - return ret; -} - -static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size) -{ - uLong ret; - ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); - return ret; -} - -static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) -{ - long ret; - ret = ftell((FILE *)stream); - return ret; -} - - -static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) -{ - ZPOS64_T ret; - ret = ftello64((FILE *)stream); - return ret; -} - -static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin) -{ - int fseek_origin=0; - long ret; - switch (origin) - { - case ZLIB_FILEFUNC_SEEK_CUR : - fseek_origin = SEEK_CUR; - break; - case ZLIB_FILEFUNC_SEEK_END : - fseek_origin = SEEK_END; - break; - case ZLIB_FILEFUNC_SEEK_SET : - fseek_origin = SEEK_SET; - break; - default: return -1; - } - ret = 0; - if (fseek((FILE *)stream, offset, fseek_origin) != 0) - ret = -1; - return ret; -} - -static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) -{ - int fseek_origin=0; - long ret; - switch (origin) - { - case ZLIB_FILEFUNC_SEEK_CUR : - fseek_origin = SEEK_CUR; - break; - case ZLIB_FILEFUNC_SEEK_END : - fseek_origin = SEEK_END; - break; - case ZLIB_FILEFUNC_SEEK_SET : - fseek_origin = SEEK_SET; - break; - default: return -1; - } - ret = 0; - - if(fseeko64((FILE *)stream, offset, fseek_origin) != 0) - ret = -1; - - return ret; -} - - -static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) -{ - int ret; - ret = fclose((FILE *)stream); - return ret; -} - -static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) -{ - int ret; - ret = ferror((FILE *)stream); - return ret; -} - -void fill_fopen_filefunc (pzlib_filefunc_def) - zlib_filefunc_def* pzlib_filefunc_def; -{ - pzlib_filefunc_def->zopen_file = fopen_file_func; - pzlib_filefunc_def->zread_file = fread_file_func; - pzlib_filefunc_def->zwrite_file = fwrite_file_func; - pzlib_filefunc_def->ztell_file = ftell_file_func; - pzlib_filefunc_def->zseek_file = fseek_file_func; - pzlib_filefunc_def->zclose_file = fclose_file_func; - pzlib_filefunc_def->zerror_file = ferror_file_func; - pzlib_filefunc_def->opaque = NULL; -} - -void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def) -{ - pzlib_filefunc_def->zopen64_file = fopen64_file_func; - pzlib_filefunc_def->zread_file = fread_file_func; - pzlib_filefunc_def->zwrite_file = fwrite_file_func; - pzlib_filefunc_def->ztell64_file = ftell64_file_func; - pzlib_filefunc_def->zseek64_file = fseek64_file_func; - pzlib_filefunc_def->zclose_file = fclose_file_func; - pzlib_filefunc_def->zerror_file = ferror_file_func; - pzlib_filefunc_def->opaque = NULL; -} http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/src/log.c ---------------------------------------------------------------------- diff --git a/deployment_admin/private/src/log.c b/deployment_admin/private/src/log.c deleted file mode 100644 index 98e757d..0000000 --- a/deployment_admin/private/src/log.c +++ /dev/null @@ -1,73 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * log.c - * - * \date Apr 19, 2012 - * \author <a href="mailto:[email protected]">Apache Celix Project Team</a> - * \copyright Apache License, Version 2.0 - */ - -#include <stddef.h> -#include <stdlib.h> - -#include "celix_errno.h" - -#include "log.h" -#include "log_store.h" - -struct log { - log_store_pt logStore; -}; - -celix_status_t log_create(log_store_pt store, log_pt *log) { - celix_status_t status = CELIX_SUCCESS; - - *log = calloc(1, sizeof(**log)); - if (!*log) { - status = CELIX_ENOMEM; - } else { - (*log)->logStore = store; - } - - return status; -} - -celix_status_t log_destroy(log_pt *log) { - free(*log); - return CELIX_SUCCESS; -} - -celix_status_t log_log(log_pt log, unsigned int type, properties_pt properties) { - celix_status_t status; - - log_event_pt event = NULL; - - status = logStore_put(log->logStore, type, properties, &event); - - return status; -} - -celix_status_t log_bundleChanged(void * listener, bundle_event_pt event) { - return CELIX_SUCCESS; -} - -celix_status_t log_frameworkEvent(void * listener, framework_event_pt event) { - return CELIX_SUCCESS; -} http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/src/log_store.c ---------------------------------------------------------------------- diff --git a/deployment_admin/private/src/log_store.c b/deployment_admin/private/src/log_store.c deleted file mode 100644 index c2bfabc..0000000 --- a/deployment_admin/private/src/log_store.c +++ /dev/null @@ -1,94 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * log_store.c - * - * \date Apr 18, 2012 - * \author <a href="mailto:[email protected]">Apache Celix Project Team</a> - * \copyright Apache License, Version 2.0 - */ -#include <stdlib.h> - -#include <time.h> - -#include "celix_errno.h" -#include "array_list.h" - -#include "log_store.h" -#include "log.h" - -struct log_store { - unsigned long storeId; - - array_list_pt logEvents; -}; - -static celix_status_t logStore_getNextID(log_store_pt store, unsigned long *id); - -celix_status_t logStore_create(log_store_pt *store) { - celix_status_t status = CELIX_SUCCESS; - *store = calloc(1, sizeof(**store)); - if (!*store) { - status = CELIX_ENOMEM; - } else { - (*store)->storeId = 1; - arrayList_create(&(*store)->logEvents); - } - - return status; -} - -celix_status_t logStore_put(log_store_pt store, unsigned int type, properties_pt properties, log_event_pt *event) { - celix_status_t status = CELIX_SUCCESS; - - *event = calloc(1, sizeof(**event)); - (*event)->targetId = NULL; - (*event)->logId = store->storeId; - (*event)->id = 0; - (*event)->time = time(NULL); - (*event)->type = type; - (*event)->properties = properties; - - logStore_getNextID(store, &(*event)->id); - - arrayList_add(store->logEvents, *event); - - return status; -} - -celix_status_t logStore_getLogId(log_store_pt store, unsigned long *id) { - *id = store->storeId; - return CELIX_SUCCESS; -} - -celix_status_t logStore_getEvents(log_store_pt store, array_list_pt *events) { - *events = store->logEvents; - return CELIX_SUCCESS; -} - -celix_status_t logStore_getHighestId(log_store_pt store, long *id) { - *id = ((long) arrayList_size(store->logEvents)) - 1; - return CELIX_SUCCESS; -} - -static celix_status_t logStore_getNextID(log_store_pt store, unsigned long *id) { - *id = arrayList_size(store->logEvents); - return CELIX_SUCCESS; -} - http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/src/log_sync.c ---------------------------------------------------------------------- diff --git a/deployment_admin/private/src/log_sync.c b/deployment_admin/private/src/log_sync.c deleted file mode 100644 index 242beea..0000000 --- a/deployment_admin/private/src/log_sync.c +++ /dev/null @@ -1,209 +0,0 @@ -/** - *Licensed to the Apache Software Foundation (ASF) under one - *or more contributor license agreements. See the NOTICE file - *distributed with this work for additional information - *regarding copyright ownership. The ASF licenses this file - *to you under the Apache License, Version 2.0 (the - *"License"); you may not use this file except in compliance - *with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - *Unless required by applicable law or agreed to in writing, - *software distributed under the License is distributed on an - *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - *specific language governing permissions and limitations - *under the License. - */ -/* - * log_sync.c - * - * \date Apr 19, 2012 - * \author <a href="mailto:[email protected]">Apache Celix Project Team</a> - * \copyright Apache License, Version 2.0 - */ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> - -#include <curl/curl.h> -#include <curl/easy.h> - -#include "celix_errno.h" -#include "celix_log.h" -#include "celixbool.h" - -#include "celix_threads.h" - -#include "log_sync.h" -#include "log_event.h" - -struct log_sync { - log_store_pt logStore; - - char *targetId; - bool running; - - celix_thread_t syncTask; -}; - -struct log_descriptor { - char *targetId; - unsigned long logId; - unsigned long low; - unsigned long high; -}; - -typedef struct log_descriptor *log_descriptor_pt; - -celix_status_t logSync_queryLog(log_sync_pt logSync, char *targetId, long logId, char **queryReply); -static size_t logSync_readQeury(void *contents, size_t size, size_t nmemb, void *userp); -static void *logSync_synchronize(void *logSyncP); - -celix_status_t logSync_create(char *targetId, log_store_pt store, log_sync_pt *logSync) { - celix_status_t status = CELIX_SUCCESS; - - *logSync = calloc(1, sizeof(**logSync)); - if (!*logSync) { - status = CELIX_ENOMEM; - } else { - (*logSync)->logStore = store; - (*logSync)->targetId = targetId; - (*logSync)->syncTask = celix_thread_default; - (*logSync)->running = true; - - celixThread_create(&(*logSync)->syncTask, NULL, logSync_synchronize, *logSync); - } - - return status; -} - -celix_status_t logSync_parseLogDescriptor(log_sync_pt logSync, char *descriptorString, log_descriptor_pt *descriptor) { - celix_status_t status = CELIX_SUCCESS; - - fw_log(logger, OSGI_FRAMEWORK_LOG_DEBUG, "Descriptor: %s", descriptorString); - char *last = NULL; - char *targetId = strtok_r(descriptorString, ",", &last); - char *logIdStr = strtok_r(NULL, ",", &last); - long logId = 0; - if (logIdStr != NULL) { - logId = atol(logIdStr); - } - char *range = strtok_r(NULL, ",", &last); - fw_log(logger, OSGI_FRAMEWORK_LOG_DEBUG, "Range: %s", range); - - long low = 0; - long high = 0; - if (range != NULL) { - char *rangeToken = NULL; - low = atol(strtok_r(range, "-", &rangeToken)); - high = atol(strtok_r(NULL, "-", &rangeToken)); - } - - *descriptor = calloc(1, sizeof(**descriptor)); - if (!*descriptor) { - status = CELIX_ENOMEM; - } else { - (*descriptor)->targetId = targetId; - (*descriptor)->logId = logId; - (*descriptor)->low = low; - (*descriptor)->high = high; - } - - return status; -} - -static void *logSync_synchronize(void *logSyncP) { - log_sync_pt logSync = logSyncP; - - while (logSync->running) { - - //query current log - // http://localhost:8080/auditlog/query?tid=targetid&logid=logid - char *logDescriptorString = NULL; - unsigned long id = 0; - logStore_getLogId(logSync->logStore, &id); - logSync_queryLog(logSync, logSync->targetId, id, &logDescriptorString); - log_descriptor_pt descriptor = NULL; - logSync_parseLogDescriptor(logSync, logDescriptorString, &descriptor); - - long highest = 0; - logStore_getHighestId(logSync->logStore, &highest); - - if (highest >= 0) { - int i; - for (i = descriptor->high + 1; i <= highest; i++) { - array_list_pt events = NULL; - logStore_getEvents(logSync->logStore, &events); - } - } - - if(descriptor!=NULL){ - free(descriptor); - } - - sleep(10); - } - - - celixThread_exit(NULL); - return NULL; -} - -struct MemoryStruct { - char *memory; - size_t size; -}; - -celix_status_t logSync_queryLog(log_sync_pt logSync, char *targetId, long logId, char **queryReply) { - // http://localhost:8080/auditlog/query?tid=targetid&logid=logid - celix_status_t status = CELIX_SUCCESS; - int length = strlen(targetId) + 60; - char query[length]; - snprintf(query, length, "http://localhost:8080/auditlog/query?tid=%s&logid=1", targetId); - - CURL *curl; - CURLcode res; - curl = curl_easy_init(); - struct MemoryStruct chunk; - chunk.memory = calloc(1, sizeof(char)); - chunk.size = 0; - if (curl) { - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - curl_easy_setopt(curl, CURLOPT_URL, query); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, logSync_readQeury); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &chunk); - curl_easy_setopt(curl, CURLOPT_FAILONERROR, true); - res = curl_easy_perform(curl); - if (res != CURLE_OK) { - status = CELIX_BUNDLE_EXCEPTION; - } - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Error: %d", res); - /* always cleanup */ - curl_easy_cleanup(curl); - - *queryReply = strdup(chunk.memory); - } - - return status; -} - -static size_t logSync_readQeury(void *contents, size_t size, size_t nmemb, void *userp) { - size_t realsize = size * nmemb; - struct MemoryStruct *mem = (struct MemoryStruct *)userp; - - mem->memory = realloc(mem->memory, mem->size + realsize + 1); - if (mem->memory == NULL) { - /* out of memory! */ - fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "not enough memory (realloc returned NULL)"); - exit(EXIT_FAILURE); - } - - memcpy(&(mem->memory[mem->size]), contents, realsize); - mem->size += realsize; - mem->memory[mem->size] = 0; - - return realsize; -} http://git-wip-us.apache.org/repos/asf/celix/blob/a1c30887/deployment_admin/private/src/miniunz.c ---------------------------------------------------------------------- diff --git a/deployment_admin/private/src/miniunz.c b/deployment_admin/private/src/miniunz.c deleted file mode 100644 index e543c3b..0000000 --- a/deployment_admin/private/src/miniunz.c +++ /dev/null @@ -1,402 +0,0 @@ -/** License - * ---------------------------------------------------------- - * Condition of use and distribution are the same than zlib : - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * ---------------------------------------------------------- - */ -/* - miniunz.c - Version 1.1, February 14h, 2010 - sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) - - Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - - Modifications of Unzip for Zip64 - Copyright (C) 2007-2008 Even Rouault - - Modifications for Zip64 support on both zip and unzip - Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - - Changes made to the original source specific for Apache Celix: - * Updated several parts to use output directory fitting Celix. - * Removed several parts not needed (main function etc). - * Added some checks for OSX/Apple -*/ - -#ifndef _WIN32 - #ifndef __USE_FILE_OFFSET64 - #define __USE_FILE_OFFSET64 - #endif - #ifndef __USE_LARGEFILE64 - #define __USE_LARGEFILE64 - #endif - #ifndef _LARGEFILE64_SOURCE - #define _LARGEFILE64_SOURCE - #endif - #ifndef _FILE_OFFSET_BIT - #define _FILE_OFFSET_BIT 64 - #endif -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <time.h> -#include <errno.h> -#include <fcntl.h> - -#include <unistd.h> -#include <utime.h> -#include <sys/stat.h> - -#include "unzip.h" -#include "archive.h" - -#define CASESENSITIVITY (0) -#define WRITEBUFFERSIZE (8192) -#define MAXFILENAME (256) - -#ifdef _WIN32 -#define USEWIN32IOAPI -#include "iowin32.h" -#endif -/* - mini unzip, demo of unzip package - - usage : - Usage : miniunz [-exvlo] file.zip [file_to_extract] [-d extractdir] - - list the file in the zipfile, and print the content of FILE_ID.ZIP or README.TXT - if it exists -*/ - - -/* change_file_date : change the date/time of a file - filename : the filename of the file where date/time must be modified - dosdate : the new date at the MSDos format (4 bytes) - tmu_date : the SAME new date at the tm_unz format */ -void change_file_date(filename,dosdate,tmu_date) - const char *filename; - uLong dosdate; - tm_unz tmu_date; -{ -#ifdef _WIN32 - HANDLE hFile; - FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; - - hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE, - 0,NULL,OPEN_EXISTING,0,NULL); - GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite); - DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); - LocalFileTimeToFileTime(&ftLocal,&ftm); - SetFileTime(hFile,&ftm,&ftLastAcc,&ftm); - CloseHandle(hFile); -#else -#if defined(unix) || defined(__APPLE__) - struct utimbuf ut; - struct tm newdate; - newdate.tm_sec = tmu_date.tm_sec; - newdate.tm_min=tmu_date.tm_min; - newdate.tm_hour=tmu_date.tm_hour; - newdate.tm_mday=tmu_date.tm_mday; - newdate.tm_mon=tmu_date.tm_mon; - if (tmu_date.tm_year > 1900) - newdate.tm_year=tmu_date.tm_year - 1900; - else - newdate.tm_year=tmu_date.tm_year ; - newdate.tm_isdst=-1; - - ut.actime=ut.modtime=mktime(&newdate); - utime(filename,&ut); -#endif -#endif -} - - -/* mymkdir and change_file_date are not 100 % portable - As I don't know well Unix, I wait feedback for the unix portion */ - -int mymkdir(dirname) - const char* dirname; -{ - int ret=0; -#ifdef _WIN32 - ret = _mkdir(dirname); -#else -#if defined unix || defined __APPLE__ - ret = mkdir(dirname,0775); -#endif -#endif - return ret; -} - -int makedir (newdir) - char *newdir; -{ - char *buffer ; - char *p; - int len = (int)strlen(newdir); - - if (len <= 0) - return 0; - - buffer = (char*)malloc(len+1); - if (buffer==NULL) - { - printf("Error allocating memory\n"); - return UNZ_INTERNALERROR; - } - strcpy(buffer,newdir); - - if (buffer[len-1] == '/') { - buffer[len-1] = '\0'; - } - if (mymkdir(buffer) == 0) - { - free(buffer); - return 1; - } - - p = buffer+1; - while (1) - { - char hold; - - while(*p && *p != '\\' && *p != '/') - p++; - hold = *p; - *p = 0; - if ((mymkdir(buffer) == -1) && (errno == ENOENT)) - { - printf("couldn't create directory %s\n",buffer); - free(buffer); - return 0; - } - if (hold == 0) - break; - *p++ = hold; - } - free(buffer); - return 1; -} - -int do_extract_currentfile(unzFile uf, char * revisionRoot) { - char filename_inzip[256]; - char* filename_withoutpath; - char* p; - int err=UNZ_OK; - FILE *fout=NULL; - void* buf; - uInt size_buf; - - unz_file_info64 file_info; - err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); - - if (err!=UNZ_OK) - { - printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); - return err; - } - - size_buf = WRITEBUFFERSIZE; - buf = (void*)malloc(size_buf); - if (buf==NULL) - { - printf("Error allocating memory\n"); - return UNZ_INTERNALERROR; - } - - p = filename_withoutpath = filename_inzip; - while ((*p) != '\0') - { - if (((*p)=='/') || ((*p)=='\\')) - filename_withoutpath = p+1; - p++; - } - - if ((*filename_withoutpath)=='\0') { - char dir[strlen(revisionRoot) + strlen(filename_inzip) + 2]; - strcpy(dir, revisionRoot); - strcat(dir, "/"); - strcat(dir, filename_inzip); - mymkdir(dir); - } - else - { - const char* write_filename; - int skip=0; - write_filename = filename_inzip; - - int length = strlen(write_filename) + strlen(revisionRoot) + 2; - char fWFN[length]; - strcpy(fWFN, revisionRoot); - strcat(fWFN, "/"); - strcat(fWFN, write_filename); - - err = unzOpenCurrentFile(uf); - if (err!=UNZ_OK) - { - printf("error %d with zipfile in unzOpenCurrentFilePassword\n",err); - } - - if ((skip==0) && (err==UNZ_OK)) - { - fout=fopen64(fWFN,"wb"); - - /* some zipfile don't contain directory alone before file */ - if ((fout==NULL) && (filename_withoutpath!=(char*)filename_inzip)) - { - char c=*(filename_withoutpath-1); - *(filename_withoutpath-1)='\0'; - int length = strlen(write_filename) + strlen(revisionRoot) + 2; - char dir[length]; - strcpy(dir, revisionRoot); - strcat(dir, "/"); - strcat(dir, write_filename); - makedir(dir); - *(filename_withoutpath-1)=c; - - fout=fopen64(fWFN,"wb"); - } - - if (fout==NULL) - { - printf("error opening %s\n",write_filename); - } - } - - if (fout!=NULL) - { - do - { - err = unzReadCurrentFile(uf,buf,size_buf); - if (err<0) - { - printf("error %d with zipfile in unzReadCurrentFile\n",err); - break; - } - if (err>0) - if (fwrite(buf,err,1,fout)!=1) - { - printf("error in writing extracted file\n"); - err=UNZ_ERRNO; - break; - } - } - while (err>0); - if (fout) - fclose(fout); - - if (err==0) - change_file_date(fWFN,file_info.dosDate, - file_info.tmu_date); - } - - if (err==UNZ_OK) - { - err = unzCloseCurrentFile (uf); - if (err!=UNZ_OK) - { - printf("error %d with zipfile in unzCloseCurrentFile\n",err); - } - } - else - unzCloseCurrentFile(uf); /* don't lose the error */ - } - - free(buf); - return err; -} - - -int do_extract(unzFile uf, char * revisionRoot) { - uLong i; - unz_global_info64 gi; - int err; - - err = unzGetGlobalInfo64(uf,&gi); - if (err!=UNZ_OK) - printf("error %d with zipfile in unzGetGlobalInfo \n",err); - - for (i=0;i<gi.number_entry;i++) - { - if (do_extract_currentfile(uf, revisionRoot) != UNZ_OK) - break; - - if ((i+1)<gi.number_entry) - { - err = unzGoToNextFile(uf); - if (err!=UNZ_OK) - { - printf("error %d with zipfile in unzGoToNextFile\n",err); - break; - } - } - } - - return 0; -} - -celix_status_t unzip_extractDeploymentPackage(char * packageName, char * destination) { - celix_status_t status = CELIX_SUCCESS; - char filename_try[MAXFILENAME+16] = ""; - unzFile uf=NULL; - - if (packageName!=NULL) - { - -# ifdef USEWIN32IOAPI - zlib_filefunc64_def ffunc; -# endif - - strncpy(filename_try, packageName,MAXFILENAME-1); - /* strncpy doesnt append the trailing NULL, of the string is too long. */ - filename_try[ MAXFILENAME ] = '\0'; - -# ifdef USEWIN32IOAPI - fill_win32_filefunc64A(&ffunc); - uf = unzOpen2_64(bundleName,&ffunc); -# else - uf = unzOpen64(packageName); -# endif - if (uf==NULL) - { - strcat(filename_try,".zip"); -# ifdef USEWIN32IOAPI - uf = unzOpen2_64(filename_try,&ffunc); -# else - uf = unzOpen64(filename_try); -# endif - } - } - - if (uf==NULL) - { - printf("Cannot open %s or %s.zip\n",packageName,packageName); - status = CELIX_FILE_IO_EXCEPTION; - } else { - if (do_extract(uf, destination) != 0) { - status = CELIX_FILE_IO_EXCEPTION; - } - - unzClose(uf); - } - - return status; -}
