NVIDIA Iray API Home  Up
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
http.h
Go to the documentation of this file.
1 //*****************************************************************************
2 // Copyright 1986, 2016 NVIDIA Corporation. All rights reserved.
3 //*****************************************************************************
6 //*****************************************************************************
7 
8 #ifndef MI_NEURAYLIB_HTTP_H
9 #define MI_NEURAYLIB_HTTP_H
10 
11 #include <cstdarg>
12 #include <cstdio>
13 
15 #include <mi/neuraylib/idata.h>
16 #include <mi/neuraylib/version.h>
17 
18 namespace mi {
19 
20 namespace http { class IConnection; class IWeb_socket; }
21 
60 namespace neuraylib {
61 
66 class IBuffer : public
70  mi::base::Interface_declare<0xfb925baf,0x1e38,0x461b,0x8e,0xcd,0x65,0xa3,0xf5,0x20,0xe5,0x92>
71 {
72 public:
74  virtual const Uint8* get_data() const = 0;
75 
77  virtual Size get_data_size() const = 0;
78 };
79  // end group mi_neuray_http
81 
82 } // namespace neuraylib
83 
86 namespace http {
87 
92 class IRequest
105 {
106 public:
108  virtual const char* get_request_line() const = 0;
109 
111  virtual const char* get_command() const = 0;
112 
114  virtual const char* get_protocol() const = 0;
115 
119  virtual void set_url( const char* url) = 0;
120 
122  virtual const char* get_url() const = 0;
123 
128  virtual void set_header( const char* key, const char* value) = 0;
129 
133  virtual void remove_header( const char* key) = 0;
134 
139  virtual const char* get_header( const char* key) const = 0;
140 
152  virtual bool get_header(
153  Size index, const char** key_pointer, const char** value_pointer) const = 0;
154 
162  virtual void set_argument( const char* key, const char* value) = 0;
163 
170  virtual void add_argument( const char* key, const char* value) = 0;
171 
177  virtual void remove_argument(const char* key) = 0;
178 
187  virtual const char* get_argument( const char* key) const = 0;
188 
200  virtual bool get_argument(
201  Size index, const char** key_pointer, const char** value_pointer) const = 0;
202 
206  virtual const char* get_body() const = 0;
207 };
208 
221 class IResponse
222 {
223 public:
228  virtual void set_result_code( Sint32 code, const char* message) = 0;
229 
231  virtual Sint32 get_result_code() const = 0;
232 
237  virtual void set_header( const char* key, const char* value) = 0;
238 
242  virtual void remove_header( const char* key) = 0;
243 
248  virtual const char* get_header( const char* key) const = 0;
249 
261  virtual bool get_header(
262  Size index, const char** key_pointer, const char** value_pointer) const = 0;
263 
265  virtual bool was_sent() const = 0;
266 };
267 
274 class IData_handler : public
275  mi::base::Interface_declare<0x723054d8,0xdfa7,0x4475,0xbc,0xb4,0x44,0x23,0x25,0xea,0x52,0x50>
276 {
277 public:
285  virtual neuraylib::IBuffer* handle( IConnection* connection, neuraylib::IBuffer* buffer) = 0;
286 };
287 
302 {
303 public:
305  virtual const char* get_peer_address() = 0;
306 
308  virtual const char* get_local_address() = 0;
309 
318  virtual bool print( const char* string) = 0;
319 
329  bool printf( const char* string, ...)
330 #ifdef MI_COMPILER_GCC
331  __attribute__((format(printf, 2, 3)))
332 #endif
333  {
334  va_list args;
335  va_start( args, string);
336  char buffer[1024];
337 #ifdef MI_COMPILER_MSC
338  vsnprintf_s( &buffer[0], sizeof( buffer), sizeof( buffer)-1, string, args);
339 #else
340  vsnprintf( &buffer[0], sizeof( buffer)-1, string, args);
341 #endif
342  bool result = this->print( &buffer[0]);
343  va_end( args);
344  return result;
345  }
346 
356  virtual bool enqueue( neuraylib::IBuffer* buffer) = 0;
357 
361  virtual Sint32 flush() = 0;
362 
366  virtual bool check_error() = 0;
367 
369  virtual IRequest* get_request() = 0;
370 
372  virtual IResponse* get_response() = 0;
373 
380  virtual void add_data_handler( IData_handler* handler) = 0;
381 
390  virtual void set_data_attachment( const char* key, IData* value) = 0;
391 
400  virtual IData* get_data_attachment( const char* key) = 0;
401 
417  template<class T>
418  T* get_data_attachment( const char* key)
419  {
420  IData* ptr = get_data_attachment( key);
421  if( !ptr)
422  return 0;
423  T* ptr_T = static_cast<T*>( ptr->get_interface( typename T::IID()));
424  ptr->release();
425  return ptr_T;
426  }
434  virtual void set_attachment( const char* key, const char* value) = 0;
435 
443  virtual const char* get_attachment( const char* key) = 0;
444 
450  virtual void remove_attachment( const char* key) = 0;
451 
463  virtual Sint32 read_data( Size size, char* buffer) = 0;
464 };
465 
473  mi::base::Interface_declare<0x70ad6206,0x38f0,0x4f2a,0xb7,0x5d,0x8f,0x90,0x64,0x3e,0xd0,0x06>
474 {
475 public:
479  virtual void handle( IWeb_socket* web_socket) = 0;
480 };
481 
488  mi::base::Interface_declare<0xbe989e2c,0xf1e6,0x492a,0xb6,0x42,0x1f,0xd7,0x30,0x1f,0xa2,0x9f>
489 {
490 public:
495  virtual void handle( IWeb_socket* web_socket, neuraylib::IBuffer* buffer) = 0;
496 };
497 
511 class IWeb_socket : public
512  mi::base::Interface_declare<0x52fd1beb,0x4c6f,0x4456,0x86,0x9c,0xfd,0xf4,0x12,0x52,0x0a,0xae>
513 {
514 public:
518  virtual const char* get_peer_address() const = 0;
519 
523  virtual const char* get_local_address() const = 0;
524 
528  virtual const char* get_url() const = 0;
529 
531  enum State
532  {
546  WS_STATE_FORCE_32_BIT = 0xffffffffU
547  };
548 
552  virtual State get_state() const = 0;
553 
566  virtual void set_state_handler( IWeb_socket_state_handler* handler) = 0;
567 
577  virtual void set_data_handler( IWeb_socket_data_handler* handler) = 0;
578 
589  virtual Difference write( neuraylib::IBuffer* buffer) = 0;
590 
595  virtual bool print( const char* string) = 0;
596 
602  bool printf( const char* string, ...)
603 #ifdef MI_COMPILER_GCC
604  __attribute__((format(printf, 2, 3)))
605 #endif
606  {
607  va_list args;
608  va_start( args, string);
609  char buffer[1024];
610 #ifdef MI_COMPILER_MSC
611  vsnprintf_s( &buffer[0], sizeof( buffer), sizeof( buffer)-1, string, args);
612 #else
613  vsnprintf( &buffer[0], sizeof( buffer)-1, string, args);
614 #endif
615  bool result = this->print( &buffer[0]);
616  va_end( args);
617  return result;
618  }
619 
621  virtual void close() = 0;
622 };
623 
624 mi_static_assert( sizeof( IWeb_socket::State) == sizeof( Uint32));
625 
634 class IWeb_socket_handler : public
635  mi::base::Interface_declare<0xb784d27c,0x3b80,0x432e,0x89,0xa0,0x13,0xe7,0x33,0x04,0x82,0x5c>
636 {
637 public:
646  virtual bool handle( IWeb_socket* web_socket) = 0;
647 };
648 
657 class IRequest_handler : public
658  mi::base::Interface_declare<0x8747d0dd,0x1e27,0x4413,0xa0,0xd4,0x07,0x60,0x8f,0xed,0xfc,0xf9>
659 {
660 public:
671  virtual bool handle( IConnection* connection) = 0;
672 };
673 
686 class ICGIRequest_handler : public
687  mi::base::Interface_declare<0xa7fe482e,0x65f8,0x4a4c,0x87,0x21,0xff,0x19,0x21,0x36,0xda,0xe0>
688 {
689 public:
700  virtual bool handle( IConnection* connection) = 0;
701 };
702 
711 class IResponse_handler : public
712  mi::base::Interface_declare<0xa9386278,0x6938,0x45a7,0xa2,0x3b,0xbb,0x35,0xf7,0xe9,0x28,0x20>
713 {
714 public:
718  virtual void handle( IConnection* connection) = 0;
719 };
720 
722 class IServer : public
723  mi::base::Interface_declare<0x9923b273,0x082f,0x403a,0x83,0x57,0xcd,0x23,0x9b,0xcf,0x68,0x4c>
724 {
725 public:
738  virtual Sint32 start( const char* listen_address) = 0;
739 
764  virtual Sint32 start_ssl(
765  const char* listen_address, const char* cert_file,
766  const char* private_key_file, const char* password) = 0;
767 
774  virtual void shutdown() = 0;
775 
780  virtual Sint32 set_default_mime_type( const char* mime_type) = 0;
781 
790  virtual void add_mime_type( const char* extension, const char* mime_type) = 0;
791 
796  virtual const char* lookup_mime_type( const char* extension) = 0;
797 
801  virtual void install( IRequest_handler* handler) = 0;
802 
806  virtual void remove( IRequest_handler* handler) = 0;
807 
811  virtual void install( IWeb_socket_handler* handler) = 0;
812 
816  virtual void remove( IWeb_socket_handler* handler) = 0;
817 
821  virtual void install( ICGIRequest_handler* handler) = 0;
822 
826  virtual void remove( ICGIRequest_handler* handler) = 0;
827 
831  virtual void install( IResponse_handler* handler) = 0;
832 
836  virtual void remove( IResponse_handler* handler) = 0;
837 
844  virtual void set_identification( const char* id_string) = 0;
845 
847  virtual const char* get_listen_address() = 0;
848 
850  virtual const char* get_ssl_listen_address() = 0;
851 
855  virtual Size get_nr_of_connections() = 0;
856 
860  virtual Size get_nr_of_active_connections() = 0;
861 
867  virtual void set_keep_alive_timeout( Uint32 nr_of_seconds) = 0;
868 
870  virtual Uint32 get_keep_alive_timeout() const = 0;
871 
877  virtual void set_send_buffer_size( Uint32 send_buffer_size) = 0;
878 
880  virtual Uint32 get_send_buffer_size() const = 0;
881 
885  virtual void set_http_post_body_limit( Uint32 http_post_body_limit) = 0;
886 
888  virtual Uint32 get_http_post_body_limit() const = 0;
889 };
890 
897 class IFactory : public
898  mi::base::Interface_declare<0xddded154,0x4be8,0x42b6,0x81,0x68,0x21,0x16,0xc7,0xbd,0x63,0x40>
899 {
900 public:
902  virtual IServer* create_server() = 0;
903 
919  const char* root_url, const char* root_path, bool is_recursive = true) = 0;
920 
929  const char* source_url, const char* target_url) = 0;
930 
940  virtual IResponse_handler* create_log_handler( const char* path) = 0;
941 
955 
970  virtual IWeb_socket* create_client_web_socket( const char* web_socket_address,
971  Float32 connect_timeout) = 0;
972 };
973  // end group mi_neuray_http
975 
976 } // namespace http
977 
978 #ifdef MI_NEURAYLIB_DEPRECATED_NAMESPACE_MI_TRANSITION
979 using neuraylib::IBuffer;
980 #endif // MI_NEURAYLIB_DEPRECATED_NAMESPACE_MI_TRANSITION
981 
982 } // namespace mi
983 
984 #endif // MI_NEURAYLIB_HTTP_H