diff --git a/FwCode.h b/FwCode.h deleted file mode 100644 index 5af3d06..0000000 --- a/FwCode.h +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 2008 Yahoo! Inc. All Rights Reserved. */ - -#ifndef __FW_CODE__H -#define __FW_CODE__H - -#include - -/** - * Global framework response codes. - */ -class FwCode { - public: - - typedef int ResponseCode; - - static const std::string unknownCodeStr; - - /** - * The convention here is to keep related codes grouped together, so - * that it is easier to find all existing codes for a particular - * module. Each section is given a range of 50 codes, so that adding - * a new code to an existing section won't invalidate all of the codes - * following it in the enum (causing binary incompatibility). - */ - - //----------- Generic section ------------- - static const ResponseCode FwOk = 0; //!< All successes - static const ResponseCode FwError = 1; //!< General error code - - static const ResponseCode FwCrit = 2; //!< General critical error. could be originated by low level library to indicate some nasty error has occurred. - - static const ResponseCode MdbmOpenFailed = 3; //!< Any kind of mdbm open failure - static const ResponseCode MdbmOperationFailed = 4; //!< Any store/fetch/lock from mdbm failed - static const ResponseCode NoMem = 5; //!< Out Of Memory - static const ResponseCode InvalidParam = 6; //!< Invalid parameter - static const ResponseCode NotFound = 7; //!< Fail to find the specified info; usuall returned by access methods - static const ResponseCode InvalidState = 8; //!< Invalid state - static const ResponseCode ConnReset = 9; //!< connection reset - static const ResponseCode Timeout = 10; //!< operation timed out - static const ResponseCode InvalidData = 11; //!< buffer data is invalid - static const ResponseCode BufTooSmall = 12; //!< Buffer size is smaller than required - static const ResponseCode MalformedRequest = 13; //!< Request data (like the URI) is malformed - static const ResponseCode RequestTooLarge = 14; //!< Request data (like the body) is too big - static const ResponseCode ConvertToDhtDataFailed = 15; // !< Failed convert json string to DHT::Data - static const ResponseCode ConvertFromDhtDataFailed = 16; // !< Failed to convert DHT::Data to json string - static const ResponseCode BadHexString = 17; //!< Failed to parse a hex string - static const ResponseCode ShmemCorrupted = 18; //!< A shared mem corruption has been detected. - static const ResponseCode ParseError = 19; //!< Generic parsing problem - /// If mdbm unlock fails, most of the time we want to shut off the - /// system automatically, without letting the caller know that we did - /// so. On specific instances where the caller is the FaultHandler, or - /// Oversight Fault counter (there may be other examples), we don't want - /// to do this because we want to avoid cross-dependency. - static const ResponseCode MdbmUnlockFailed = 20; - - //----------- Generic section ------------- - // Config - static const ResponseCode ConfigFailure = 50; //!< Failure to find or parse a config entry - - //----------- UChar section ------------- - // UCharUtils - static const ResponseCode UcnvOpenFailed = 100; //!< Failed to open ucnv converter for utf-8 - static const ResponseCode DataNotUtf8 = 101; //!< Data is not in utf-8 format - static const ResponseCode ConvertToUCharFailed = 102; //!< Failed to convert utf-8 string to UChar string - static const ResponseCode CompileRegExFailed = 103; //!< Failed to compile the regular expression - - //----------- Yca section ------------- - // YcaClient - static const ResponseCode YcaOpenFailed = 150; //!< Failed to open the yca database - static const ResponseCode YcaCertInvalid = 151; //!< Validation of presented cert failed - static const ResponseCode YcaCertNotFound = 152; //!< certificate for the requested appID was not found - - //----------- Broker section ------------- - static const ResponseCode BrokerClientOpenFailed = 200; //!< Failed to connect to broker - static const ResponseCode UncertainPublish = 201; //!< Publish was uncertain - unknown if it happened - static const ResponseCode PublishFailed = 202; //!< Publish failed (for certain :)) - static const ResponseCode SubscribeFailed = 203; //!< Failed to subscribe to a topic - static const ResponseCode NoSubscriptionFound = 204; //!< Operation on a sub failed because we (locally) - // don't know about it - static const ResponseCode RegisterFailed = 205; //!< Failed to register handler for subscription - static const ResponseCode UnsubscribeFailed = 206; //!< Failed to unsubscribe from sub - static const ResponseCode ListTopicsFailed = 207; //!< Failed to list subscribed topics - static const ResponseCode ConsumeFailed = 208; //!< Failed to consume messages for a topic - static const ResponseCode TopicInvalid = 209; //!< Topic is invalid (was usurped or ymb 'lost' it) - static const ResponseCode NoMessageDelivered = 210; //!< Call to deliver() found no messages ready - static const ResponseCode ConsumeFailedBadTopic = 211; //!< The topic is bad - our handle is bad, - // or it got usurped - static const ResponseCode ConsumeFailedBadHandle = 212; //!< Our ymb handle is bad - not usable anymore - static const ResponseCode ConsumeFailedConnectionError = 213; //!< a recoverable connection error - static const ResponseCode ConsumeFailedServerBusy = 214; //!< ymb server is having a temporary issue, - // not a failure per se - // second argument to messageProcessed() - static const ResponseCode ConsumeMessage = 215; //!< consume this message - static const ResponseCode ConsumeAndUnsubscribe = 216; //!< end this channel - // Internal to ymb implementation - static const ResponseCode YmbSubscribeTempFailure = 217; //!< A failure that might be resolved on a retry - static const ResponseCode YmbSubscribeTimedout = 218; //!< A timeout failure - static const ResponseCode YmbSubscriptionExists = 219; //!< Attempt to create a sub that already exists - static const ResponseCode NoSuchSubscription = 220; //!< Attempt to attach to a sub that does not exist - static const ResponseCode AttachNoSuchSubscription = 221; //!< Specific to attach, no subscription to attach to (not necessarily an error) - static const ResponseCode BrokerInitFailed = 222; //!< Config or allocation failed - static const ResponseCode BrokerConnectionLost = 223; //!< Lost connection to broker - static const ResponseCode BrokerFatalError = 224; //!< Generally shared mem corruption - - - //----------- Daemon section ------------- - // Daemon - static const ResponseCode NoImpl = 250; //!< No op - static const ResponseCode Restart = 251; //!< Exit the daemon so that it is restarted right away. - // request that the daemon do a soft restart - static const ResponseCode Exit = 252; //!< Exit the daemon so that it is NOT restarted right away. A monitoring process may restart the entire system later. - static const ResponseCode StopDelivery = 253; //!< Stop delivery on the topic, returned by Broker handlers only. - static const ResponseCode RetryDelivery = 254; //!< Stop delivery on the topic but retry after sometime, returned by Broker handlers only. - - //----------- Lock section ------------- - // LockManager - //ALL these lock errors are handled in SuFaulHandler.cc - //Any addition to these error codes requires update to the SuFaultHandler - static const ResponseCode LockSyserr = 301; //!< System error during lock/unlock op - static const ResponseCode LockInconsis = 302; //!< Inconsistency detected in LockManager. - static const ResponseCode LockNested = 303; //!< Nested locking of same key not allowed. - static const ResponseCode LockNosuchpid = 304; //!< This pid does not hold the lock. - static const ResponseCode LockUnavail = 305; //!< Outa lock - static const ResponseCode LockInitfail = 306; //!< Initialization failure of the lock subsystem - static const ResponseCode LockInvalidarg = 307; //!< Invalid arguments to lock subsystem. - - //----------- Message section ------------- - //Message and Message serialization - static const ResponseCode SerializeFailed = 350; //!< Message Serialization Failed - static const ResponseCode DeserializeFailed = 351; //!< Message Deserialization failed - static const ResponseCode NoResponseCodeInMessage = 352; - - //----------- Transport Errors ------------- - static const ResponseCode TransportSendError = 400; //!< Curl error in communicating with other server - static const ResponseCode TransportSetHeaderFailed = 401; //!< Error in setting header in curl request - static const ResponseCode TransportCurlInitError = 402; // !< Error initializing curl handle -- should be curl specific - static const ResponseCode TransportUncertain = 403; //!< Send came back uncertain (timeout, usually) - static const ResponseCode TransportInvalidResponseBody = 404; //!< Send came back unparsable body - - //----------- Apache/Web section ------------- - static const ResponseCode EndOfBody = 450; //!< Normal end of incoming request body - static const ResponseCode BodyReadFailed = 451; //!< Failed reading incoming request body - static const ResponseCode BodyWriteFailed = 452; //!< Failed writing outgoing request body - static const ResponseCode EncryptionFailed = 453; //!< Failed to encrypt body or header - static const ResponseCode DecryptionFailed = 454; //!< Failed to decrypt body or header - - /** - * Give back a basic, generic string description of the response code. - * - * @param rc The response code to convert. - * @return The string describing it. - */ - static std::string toString(ResponseCode rc); - -}; - -/* For customized vim control - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4:ts=4:et - * vim<600: sw=4:ts=4:et - */ -#endif diff --git a/StringUtils.h b/StringUtils.h deleted file mode 100644 index d098b76..0000000 --- a/StringUtils.h +++ /dev/null @@ -1,345 +0,0 @@ -/* $Id: StringUtils.h,v 1.17 2009/03/25 20:32:51 dlomax Exp $ */ -/* Copyright (C) 2008 Yahoo! Inc. All Rights Reserved. */ - -#ifndef __STRING_UTIL_H -#define __STRING_UTIL_H -#include -#include -#include -#include "FwCode.h" - -/** - * Container for static string manipulation utilities. - */ -class StringUtils -{ - public: - - /** - * Our replacement for yax_getroot(). Allows our code to have a different - * root than components we use or link with. Is nice for unit testing. - * @return Copy of the value in a std::string - */ - static std::string getDhtRoot(); - - /** - * Parse a tablet name into left and right limits. - * @return true if parsing successful, false if incorrect format - */ - static bool parseTabletName(const std::string& tablet, std::string& leftLimit, - std::string& rightLimit); - - /** - * Construct a tablet name from left and right limits. - */ - static void buildTabletName(const std::string& leftLimit, - const std::string& rightLimit, - std::string& tablet); - - /** - * General purpose method to assemble a full path name, using - * getDhtRoot() so that - * the root will be configurable. DO NOT supply "/home/y" in path1. - */ - static std::string makePath(const std::string& path1 = "", - const std::string& path2 = "", - const std::string& path3 = "", - const std::string& path4 = "", - const std::string& path5 = "", - const std::string& path6 = ""); - - /** - * Append additional paths to an existing one - does not prepend ROOT. - */ - static void appendPath(std::string& base_path, const std::string& path2 = "", - const std::string& path3 = "", - const std::string& path4 = ""); - - /** - * Construct a topic name from a table/tablet. - * - * @return the topic name - */ - static std::string buildTopicName(const std::string& table, - const std::string& tablet); - - /** - * Construct a topic name from a table/tablet. - * @param topic Is filled with the topic name. - */ - static void buildTopicName(const std::string& table, - const std::string& tablet, - std::string &topic); - - /** - * Parses topic into table and tablet portions. - * - * @param table Filled with the table name. - * @param tablet Filled with the tablet name. - * @param true if the parsing succeeded, false if not. - */ - static bool parseTopicName(const std::string& topic, - std::string& table, - std::string &tablet); - - /** - * Only for use in log statements - this is slow. Produce a printable - * string where binary (<32) characters are hex encoded, but all others - * are left alone. - * - * @param str string to encode - * @param len length of string - * @return encoded string. - */ - static std::string toPrintable(const char *str, size_t len); - - /** - * Convert a formatted hex string back into its original - * 64-bit value - * - * @param value the hex-encoded string - * @param out the value - * @return FwCode::FwOk on success, FwCode::BadHexString on parse failure - */ - static FwCode::ResponseCode - convertHexStringToUI64(const std::string& value, uint64_t& out); - - /** - * Convert a formatted hex string back into its original - * 32-bit value - * - * @param value the hex-encoded string - * @param out the value - * @return FwCode::FwOk on success, FwCode::BadHexString on parse failure - */ - static FwCode::ResponseCode - convertHexStringToUI32(const std::string& value, uint32_t& out); - - /** - * Standard means for formatting a 0x prefixed hex string from a - * 64-bit unsigned value. Will produce upper-case letters. Will - * pad with zeros at the beginning to fill out 16 hex chars. - * - * @param the value to format - * @return the formatted value, like "0xDEADBEEF00000000" - */ - static std::string convertUI64ToHexString( uint64_t val ); - - /** - * Standard means for formatting a 0x prefixed hex string from a - * 32-bit unsigned value. Will produce upper-case letters. Will - * pad with zeros at the beginning to fill out 8 hex chars. - * - * @param the value to format - * @return the formatted value, like "0xDEADBEEF" - */ - static std::string convertUI32ToHexString( unsigned int val ); - - /** - * Standard means for formatting a small hex string from a - * 32-bit unsigned value. The "0x" will NOT be included. - * Will produce upper-case letters. Will NOT pad with zeros - * at the beginning. - * - * @param the value to format - * @return the formatted value, like "DEADBEEF" - */ - static std::string convertUI32ToMinimalHexString( unsigned int val ); - - /** - * Assemble the fields of ENCRYPTED_BODY_HEADER and encrypt it for - * sending to the remote side. - * @param result is the out parameter having the resulting string. - * @param encKeyName is the name of the key in keydb whose value will be - * used as the encryption key - * @param bodyEncVersion is the version of the encryption scheme used to - * encrypt the body (not the encryption scheme of this header itself). - * @param expireTime is the time (in usecs) after which the request - * should not be processed by the receiver of this header. - */ - static FwCode::ResponseCode makeEncryptedBodyHdr(std::string & result, - const char *encKeyName, uint32_t bodyEncVersion, uint64_t expireTime); - - /** - * Parse the incoming ENCRYPTED_BODY_HEADER, decrypting it, and - * separating the fields in it. - * @param inval is the incoming encrypted string. - * @param encKeyName is the name of the key in keydb whose value will be - * used as the decryption key - * @param bodyEncVersion is the version of the encryption scheme to be - * used to * decrypt the body (not for the decryption of this header - * itself). - * @param expireTime is the time (in usecs) after which the response - * should not be processed by the receiver of this header. - */ - static FwCode::ResponseCode parseEncryptedBodyHdr(const std::string & inval, - const char *encKeyName, uint32_t & bodyEncVersion, uint64_t & expireTime); - - /** - * Get the hash for an un-normalized record name. - * - * @param unnormalizedRecordName a raw record name from user input - * @param (output) hashResult the hex string of the hash value. - * @return FwCode::FwOk on success, else an error relating to normalization - */ - static FwCode::ResponseCode normalizeAndHashRecordName - ( const std::string& unnormalizedRecordName, - std::string & hashResult /* out */ ); - - /** - * Get the hash for a normalized record name. - * - * @param recordName the record name. MUST be previously normalized. - * @return hashResult the uint32_t of the hash value. - */ - static uint32_t hashRecordName(const std::string& recordName); - - /** - * Get the hash for a normalized record name. - * - * @param recordName the record name. MUST be previously normalized. - * @param (output) hashResult the hex string of the hash value. - */ - static void hashRecordName( const std::string& recordName, - std::string & hashResult /* out */ ); - /** - * Get the hash for a normalized record name in string and int form - * - * @param recordName the record name. MUST be previously normalized. - * @param (output) hashResult the hex string of the hash value. - * @param (output) hexNum numerical value of hash - */ - static void hashRecordName( const std::string& recordName, - std::string & hashResult /* out */, - uint32_t& hexNum); - - /** - * Method to hash a string using crc32. - * - * @param buf data to hash - * @param len length of buf - * @return hash value - */ - static uint32_t crcHash(const char * buf, uint32_t len); - - /** - * util function to convert any type to a string - */ - template static inline std::string toString(T item); - - /** - * convert string to any type of value - * @param strValue string value to parse - * @param value(out) value to read from strValue - * @return FwCode::FwOk on success - * FwCode::FwError on failure (error is *not* logged) - */ - template static inline - FwCode::ResponseCode fromString(const std::string& strValue, - T& value); - - /** - * convert a hexadecimal number to string representation - * of fixed width ( 2 * sizeof(T) ) - * @param value number to convert to string - * @return string representation of value - */ - template static inline - std::string numberToHexString(T value); - - /** - * convert a hexadecimal number to minimal string representation - * @param value number to convert to string - * @return string representation of value - */ - template static inline - std::string numberToMinimalHexString(T value); - - /** - * convert a hexadecimal string to a number - * @param strvalue input string to read from - * @param value(out) output number - * @return FwCode::FwOk on successful conversion - * FwCode::FwError on failure to convert strvalue - * to number - */ - template static inline - FwCode::ResponseCode hexStringToNumber(const std::string& strvalue, - T& value); - - - static const std::string EMPTY_STRING; -}; - -template -std::string StringUtils:: -toString(T item) -{ - std::ostringstream buf; - buf << item; - return buf.str(); -} - -template -FwCode::ResponseCode StringUtils:: -fromString(const std::string& strValue, - T& value) -{ - std::istringstream buf(strValue); - buf >> value; - if(buf.fail()|| - (strValue.length() != buf.tellg() )) - { - return FwCode::FwError; - } - return FwCode::FwOk; -} - -template -std::string StringUtils:: -numberToHexString(T value) -{ - std::ostringstream buf; - buf << "0x" << std::hex - << std::setw(sizeof(T) * 2) << std::setfill('0') - << std::uppercase << value; - return buf.str(); - -} - -template -std::string StringUtils:: -numberToMinimalHexString(T value) -{ - std::ostringstream buf; - buf << std::hex << std::uppercase << value; - return buf.str(); - -} - -template -FwCode::ResponseCode StringUtils:: -hexStringToNumber(const std::string& strvalue, - T& value) -{ - std::istringstream buf(strvalue); - buf >> std::hex >> value; - if(buf.fail() || - (strvalue.length() != buf.tellg() )) - { - return FwCode::FwError; - } - return FwCode::FwOk; - -} - -/* - * For customized vim control - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4:ts=4:et - * vim<600: sw=4:ts=4:et - */ -#endif