Former-commit-id:a02aeb236c
[formerly9f19e3f712
] [formerlya02aeb236c
[formerly9f19e3f712
] [formerly06a8b51d6d
[formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]]] Former-commit-id:06a8b51d6d
Former-commit-id:8e80217e59
[formerly3360eb6c5f
] Former-commit-id:377dcd10b9
116 lines
2.7 KiB
C++
116 lines
2.7 KiB
C++
/*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef _THRIFT_THRIFT_H_
|
|
#define _THRIFT_THRIFT_H_ 1
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
#include <stdio.h>
|
|
|
|
#include <sys/types.h>
|
|
#include <netinet/in.h>
|
|
#ifdef HAVE_INTTYPES_H
|
|
#include <inttypes.h>
|
|
#endif
|
|
#include <string>
|
|
#include <map>
|
|
#include <list>
|
|
#include <set>
|
|
#include <vector>
|
|
#include <exception>
|
|
|
|
#include "TLogging.h"
|
|
|
|
namespace apache { namespace thrift {
|
|
|
|
class TOutput {
|
|
public:
|
|
TOutput() : f_(&errorTimeWrapper) {}
|
|
|
|
inline void setOutputFunction(void (*function)(const char *)){
|
|
f_ = function;
|
|
}
|
|
|
|
inline void operator()(const char *message){
|
|
f_(message);
|
|
}
|
|
|
|
// It is important to have a const char* overload here instead of
|
|
// just the string version, otherwise errno could be corrupted
|
|
// if there is some problem allocating memory when constructing
|
|
// the string.
|
|
void perror(const char *message, int errno_copy);
|
|
inline void perror(const std::string &message, int errno_copy) {
|
|
perror(message.c_str(), errno_copy);
|
|
}
|
|
|
|
void printf(const char *message, ...);
|
|
|
|
inline static void errorTimeWrapper(const char* msg) {
|
|
time_t now;
|
|
char dbgtime[26];
|
|
time(&now);
|
|
ctime_r(&now, dbgtime);
|
|
dbgtime[24] = 0;
|
|
fprintf(stderr, "Thrift: %s %s\n", dbgtime, msg);
|
|
}
|
|
|
|
/** Just like strerror_r but returns a C++ string object. */
|
|
static std::string strerror_s(int errno_copy);
|
|
|
|
private:
|
|
void (*f_)(const char *);
|
|
};
|
|
|
|
extern TOutput GlobalOutput;
|
|
|
|
class TException : public std::exception {
|
|
public:
|
|
TException() {}
|
|
|
|
TException(const std::string& message) :
|
|
message_(message) {}
|
|
|
|
virtual ~TException() throw() {}
|
|
|
|
virtual const char* what() const throw() {
|
|
if (message_.empty()) {
|
|
return "Default TException.";
|
|
} else {
|
|
return message_.c_str();
|
|
}
|
|
}
|
|
|
|
protected:
|
|
std::string message_;
|
|
|
|
};
|
|
|
|
|
|
// Forward declare this structure used by TDenseProtocol
|
|
namespace reflection { namespace local {
|
|
struct TypeSpec;
|
|
}}
|
|
|
|
|
|
}} // apache::thrift
|
|
|
|
#endif // #ifndef _THRIFT_THRIFT_H_
|