func StartServer( host string, port int64, domain_socket string, transport string, protocol string, ssl bool, certPath string, handler thrifttest.ThriftTest) (srv *thrift.TSimpleServer, err error) { hostPort := fmt.Sprintf("%s:%d", host, port) var protocolFactory thrift.TProtocolFactory switch protocol { case "compact": protocolFactory = thrift.NewTCompactProtocolFactory() case "simplejson": protocolFactory = thrift.NewTSimpleJSONProtocolFactory() case "json": protocolFactory = thrift.NewTJSONProtocolFactory() case "binary": protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() default: return nil, fmt.Errorf("Invalid protocol specified %s", protocol) } if debugServerProtocol { protocolFactory = thrift.NewTDebugProtocolFactory(protocolFactory, "server:") } var serverTransport thrift.TServerTransport if ssl { cfg := new(tls.Config) if cert, err := tls.LoadX509KeyPair(certPath+"/server.crt", certPath+"/server.key"); err != nil { return nil, err } else { cfg.Certificates = append(cfg.Certificates, cert) } serverTransport, err = thrift.NewTSSLServerSocket(hostPort, cfg) } else { if domain_socket != "" { serverTransport, err = thrift.NewTServerSocket(domain_socket) } else { serverTransport, err = thrift.NewTServerSocket(hostPort) } } if err != nil { return nil, err } var transportFactory thrift.TTransportFactory switch transport { case "http": return nil, fmt.Errorf("Http server transport is not supported") // trans, err = thrift.NewTHttpClient(fmt.Sprintf("http://%s/service", hostPort)) // if err != nil { // return nil, err // } case "framed": transportFactory = thrift.NewTTransportFactory() transportFactory = thrift.NewTFramedTransportFactory(transportFactory) case "buffered": transportFactory = thrift.NewTBufferedTransportFactory(8192) case "zlib": transportFactory = thrift.NewTZlibTransportFactory(zlib.BestCompression) case "": transportFactory = thrift.NewTTransportFactory() default: return nil, fmt.Errorf("Invalid transport specified %s", transport) } processor := thrifttest.NewThriftTestProcessor(handler) server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory) if err = server.Listen(); err != nil { return } go server.AcceptLoop() return server, nil }
func StartClient( host string, port int64, domain_socket string, transport string, protocol string, ssl bool) (client *thrifttest.ThriftTestClient, err error) { hostPort := fmt.Sprintf("%s:%d", host, port) var protocolFactory thrift.TProtocolFactory switch protocol { case "compact": protocolFactory = thrift.NewTCompactProtocolFactory() case "simplejson": protocolFactory = thrift.NewTSimpleJSONProtocolFactory() case "json": protocolFactory = thrift.NewTJSONProtocolFactory() case "binary": protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() default: return nil, fmt.Errorf("Invalid protocol specified %s", protocol) } if debugClientProtocol { protocolFactory = thrift.NewTDebugProtocolFactory(protocolFactory, "client:") } var trans thrift.TTransport if ssl { trans, err = thrift.NewTSSLSocket(hostPort, &tls.Config{InsecureSkipVerify: true}) } else { if domain_socket != "" { trans, err = thrift.NewTSocket(domain_socket) } else { trans, err = thrift.NewTSocket(hostPort) } } if err != nil { return nil, err } switch transport { case "http": trans, err = thrift.NewTHttpClient(fmt.Sprintf("http://%s/service", hostPort)) if err != nil { return nil, err } case "framed": trans = thrift.NewTFramedTransport(trans) case "buffered": trans = thrift.NewTBufferedTransport(trans, 8192) case "": trans = trans default: return nil, fmt.Errorf("Invalid transport specified %s", transport) } if err = trans.Open(); err != nil { return nil, err } client = thrifttest.NewThriftTestClientFactory(trans, protocolFactory) return }
func GetServerParams( host string, port int64, domain_socket string, transport string, protocol string, ssl bool, certPath string, handler thrifttest.ThriftTest) (thrift.TProcessor, thrift.TServerTransport, thrift.TTransportFactory, thrift.TProtocolFactory, error) { var err error hostPort := fmt.Sprintf("%s:%d", host, port) var protocolFactory thrift.TProtocolFactory switch protocol { case "compact": protocolFactory = thrift.NewTCompactProtocolFactory() case "simplejson": protocolFactory = thrift.NewTSimpleJSONProtocolFactory() case "json": protocolFactory = thrift.NewTJSONProtocolFactory() case "binary": protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() default: return nil, nil, nil, nil, fmt.Errorf("Invalid protocol specified %s", protocol) } if debugServerProtocol { protocolFactory = thrift.NewTDebugProtocolFactory(protocolFactory, "server:") } var serverTransport thrift.TServerTransport if ssl { cfg := new(tls.Config) if cert, err := tls.LoadX509KeyPair(certPath+"/server.crt", certPath+"/server.key"); err != nil { return nil, nil, nil, nil, err } else { cfg.Certificates = append(cfg.Certificates, cert) } serverTransport, err = thrift.NewTSSLServerSocket(hostPort, cfg) } else { if domain_socket != "" { serverTransport, err = thrift.NewTServerSocket(domain_socket) } else { serverTransport, err = thrift.NewTServerSocket(hostPort) } } if err != nil { return nil, nil, nil, nil, err } var transportFactory thrift.TTransportFactory switch transport { case "http": // there is no such factory, and we don't need any transportFactory = nil case "framed": transportFactory = thrift.NewTTransportFactory() transportFactory = thrift.NewTFramedTransportFactory(transportFactory) case "buffered": transportFactory = thrift.NewTBufferedTransportFactory(8192) case "zlib": transportFactory = thrift.NewTZlibTransportFactory(zlib.BestCompression) case "": transportFactory = thrift.NewTTransportFactory() default: return nil, nil, nil, nil, fmt.Errorf("Invalid transport specified %s", transport) } processor := thrifttest.NewThriftTestProcessor(handler) return processor, serverTransport, transportFactory, protocolFactory, nil }