| HTCache.h | | HTCache.h | |
|
| /* W3C Sample Code Library libwww Persis | | /* | |
| tent Cache Manager | | | |
| PERSISTENT CACHE MANAGER | | W3C Sample Code Library libwww Persi | |
| | | stent Cache Manager | |
| | | | |
| | | ! | |
| | | Persistent Cache Manager | |
| | | ! | |
| | | */ | |
| | | | |
|
| */ | | | |
| /* | | /* | |
|
| ** (c) COPYRIGHT MIT 1995. | | ** (c) COPYRIGHT MIT 1995. | |
| ** Please first read the full copyright statement in the file COPYRIGH | | ** Please first read the full copyright statement in the file COPYRIGH. | |
| . | | | |
| */ | | */ | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| The cache contains details of persistent files which contain the content | | The cache contains details of persistent files which contain the contents | |
| s of remote | | of remote documents. The existing cache manager is somewhat naive - especia | |
| documents. The existing cache manager is somewhat naive - especially in | | lly | |
| its garbage | | in its garbage collection but it is just an example of how it can be | |
| collection but it is just an example of how it can be done.However, it i | | done.However, it is a fully HTTP/1.1 compliant cache manager. More adv | |
| s a fully | | anced | |
| HTTP/1.1 compliant cache manager. More advanced implementations are welc | | implementations are welcome! | |
| ome! | | | |
| | | | |
|
| This module is implemented by HTCache.c, and it is a part of the W3C Sam | | This module is implemented by HTCache.c, and it is | |
| ple Code | | a part of the W3C Sample Code Library. | |
| Library. | | */ | |
| | | | |
|
| */ | | | |
| #ifndef HTCACHE_H | | #ifndef HTCACHE_H | |
| #define HTCACHE_H | | #define HTCACHE_H | |
| | | | |
| #include "WWWLib.h" | | #include "WWWLib.h" | |
|
| /* | | | |
| | | | |
|
| INITIALIZE AND TERMINATE THE PERSISTENT CACHE | | /* | |
| | | . | |
| The cache_root is the URI of the location of the persistent cache. An ex | | Initialize and Terminate the Persistent Cache | |
| ample is | | . | |
| "file:/tmp/w3c-lib". If cache_root is NULL then determine a cache root u | | | |
| sing the | | | |
| following algorithm: | | | |
| | | | |
|
| Look for any environment variables (if supported) in the following or | | The cache_root is the URI of the location of the persistent | |
| der: WWW_CACHE, | | cache. An example is "file:/tmp/w3c-lib". If | |
| TMP, and TEMP. If none are set then then fall back on "/tmp". | | cache_root is NULL then determine a cache root | |
| | | using the following algorithm: | |
| | | | |
|
| Append the folder name "w3c-cache" to the root identified above | | o | |
| | | Look for any environment variables (if supported) in the follow | |
| | | ing order: | |
| | | WWW_CACHE, TMP, and TEMP. If none | |
| | | are set then then fall back on "/tmp". | |
| | | o | |
| | | Append the folder name "w3c-cache" to the root identified above | |
| | | | |
|
| The cache_root location does not have to exist, it will be created autom | | The cache_root location does not have to exist, it will be created | |
| atically if | | automatically if not. An empty string will make '/' the cache root. | |
| not. An empty string will make '/' the cache root. | | | |
| | | | |
|
| The size is the total size in MBytes - the default size is 20M. The cach | | The size is the total size in MBytes - the default size is 20M. The cache | |
| e can not be | | can not be less than 5M. | |
| less than 5M. | | | |
| | | | |
|
| We can only enable the cache if we are in secure mode where we can not a | | We can only enable the cache if we are in secure | |
| ccess the local | | mode where we can not access the local file system. This is for example | |
| file system. This is for example the case if using an application as a t | | the case if using an application as a telnet shell. | |
| elnet shell. | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCacheInit (const char * cache_root, int size); | | extern BOOL HTCacheInit (const char * cache_root, int size); | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| After the cache has been terminated it can not be used anymore unless yo | | After the cache has been terminated it can not be used anymore unless you | |
| u do another | | do another HTCacheInit() call. | |
| HTCacheInit() call. | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCacheTerminate (void); | | extern BOOL HTCacheTerminate (void); | |
|
| /* | | | |
| | | | |
|
| CACHE MODE PARAMETERS | | /* | |
| | | . | |
| The persistent cache has a set of overall parameters that you can adjust | | Cache Mode Parameters | |
| | | . | |
| | | | |
|
| | | The persistent cache has a set of overall parameters that you can adjust | |
| | | ( | |
| Enable and Disable the Cache | | Enable and Disable the Cache | |
|
| | | ) | |
| | | | |
|
| The cache can be temporarily suspended by using the enable/disable flag. | | The cache can be temporarily suspended by using the enable/disable flag. | |
| This does not | | This does not prevent the cache from being enabled/disable at a later point | |
| prevent the cache from being enabled/disable at a later point in time. | | in time. | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern void HTCacheMode_setEnabled (BOOL mode); | | extern void HTCacheMode_setEnabled (BOOL mode); | |
| extern BOOL HTCacheMode_enabled (void); | | extern BOOL HTCacheMode_enabled (void); | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| The cache can be setup to whether cache password protected documents thr | | The cache can be setup to whether cache password protected documents thru t | |
| u the protected | | he | |
| flag. By default this flag is turned off. | | protected flag. By default this flag is turned off. | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern void HTCacheMode_setProtected (BOOL mode); | | extern void HTCacheMode_setProtected (BOOL mode); | |
| extern BOOL HTCacheMode_protected (void); | | extern BOOL HTCacheMode_protected (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| What is the current Cache Root? | | What is the current Cache Root? | |
|
| | | ) | |
| | | | |
|
| Return the value of the cache root. The cache root can only be set throu | | Return the value of the cache root. The cache root can only be set through | |
| gh the | | the HTCacheInit() function. The string returned MUST be freed | |
| HTCacheInit() function. The string returned MUST be freed by the caller | | by the caller | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern char * HTCacheMode_getRoot (void); | | extern char * HTCacheMode_getRoot (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Total Cache Size | | Total Cache Size | |
|
| | | ) | |
| | | | |
|
| We set the default cache size to 20M. We set the minimum size to 5M in o | | We set the default cache size to 20M. We set the minimum size to 5M in orde | |
| rder not to get | | r | |
| into weird problems while writing the cache. The size is indicated in Me | | not to get into weird problems while writing the cache. The size is indicat | |
| ga bytes. The | | ed | |
| size is given in MBytes and is also returned in MBytes. We don't conside | | in Mega bytes. The size is given in MBytes and is also returned in MBytes. | |
| r the | | We don't consider the metainformation as part of the total cache size which | |
| metainformation as part of the total cache size which is the the reason | | is the the reason for why the min cache size should not be less than 5M. | |
| for why the min | | */ | |
| cache size should not be less than 5M. | | | |
| | | | |
|
| */ | | | |
| extern BOOL HTCacheMode_setMaxSize (int size); | | extern BOOL HTCacheMode_setMaxSize (int size); | |
| extern int HTCacheMode_maxSize (void); | | extern int HTCacheMode_maxSize (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Max Size of a Single Cache Entry | | Max Size of a Single Cache Entry | |
|
| | | ) | |
| | | | |
|
| It is also possible to control the max size of a single cache entry so t | | It is also possible to control the max size of a single cache entry so that | |
| hat the cache | | the cache doesn't get filled with a very few, very large cached entries. | |
| doesn't get filled with a very few, very large cached entries. The defau | | The default max size for a single cached entry is 3M. The value indicated | |
| lt max size for | | must be in Mbytes, for example, a vaue of 3 would mean 3 MBytes. | |
| a single cached entry is 3M. The value indicated must be in Mbytes, for | | */ | |
| example, a vaue | | | |
| of 3 would mean 3 MBytes. | | | |
| | | | |
|
| */ | | | |
| extern BOOL HTCacheMode_setMaxCacheEntrySize (int size); | | extern BOOL HTCacheMode_setMaxCacheEntrySize (int size); | |
| extern int HTCacheMode_maxCacheEntrySize (void); | | extern int HTCacheMode_maxCacheEntrySize (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| How do we handle Expiration of Cached Objects? | | How do we handle Expiration of Cached Objects? | |
|
| | | ) | |
| | | | |
|
| There are various ways of handling Expires header when met in a history | | There are various ways of handling Expires header when met in | |
| list. Either it | | a history list. Either it can be ignored all together, the user can | |
| can be ignored all together, the user can be notified with a warning, or | | be notified with a warning, or the document can be reloaded automatically. | |
| the document | | This flag decides what action to be taken. The default action is | |
| can be reloaded automatically. This flag decides what action to be taken | | HT_EXPIRES_IGNORE. In HT_EXPIRES_NOTIFY mode , | |
| . The default | | we push a message on to the Error stack which is presented to the user. | |
| action is HT_EXPIRES_IGNORE. In HT_EXPIRES_NOTIFY mode , we push a messa | | */ | |
| ge on to the | | | |
| Error stack which is presented to the user. | | | |
| | | | |
|
| */ | | | |
| typedef enum _HTExpiresMode { | | typedef enum _HTExpiresMode { | |
| HT_EXPIRES_IGNORE = 0, | | HT_EXPIRES_IGNORE = 0, | |
| HT_EXPIRES_NOTIFY, | | HT_EXPIRES_NOTIFY, | |
| HT_EXPIRES_AUTO | | HT_EXPIRES_AUTO | |
| } HTExpiresMode; | | } HTExpiresMode; | |
| | | | |
| extern void HTCacheMode_setExpires (HTExpiresMode mode); | | extern void HTCacheMode_setExpires (HTExpiresMode mode); | |
| extern HTExpiresMode HTCacheMode_expires (void); | | extern HTExpiresMode HTCacheMode_expires (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Disconnected Operation | | Disconnected Operation | |
|
| | | ) | |
| | | | |
|
| The cache can be set to handle disconnected operation where it does not | | The cache can be set to handle disconnected operation where it does not use | |
| use the network | | the network to validate entries and do not attempt to load new documents. | |
| to validate entries and do not attempt to load new documents. All reques | | All requests that can not be fulfilled by the cache will be returned with | |
| ts that can not | | a "504 Gateway Timeout" response. There are two modes of how | |
| be fulfilled by the cache will be returned with a "504 Gateway Timeout" | | the cache can operate in disconnected mode: | |
| response. There | | | |
| are two modes of how the cache can operate in disconnected mode: | | | |
| | | | |
|
| No network activity at all | | No network activity at all | |
| Here is uses its own persistent cache | | | |
| | | | |
|
| Forward all disconnected requests to a proxy cache | | Here is uses its own persistent cache | |
| Here it uses the HTTP/1.1 cache-control to indicat | | | |
| e that the | | Forward all disconnected requests to a proxy cache | |
| proxy should operate in disconnected mode. This mo | | | |
| de only really | | Here it uses the HTTP/1.1 cache-control to indicate that the proxy shou | |
| makes sense when you are using a proxy, of course. | | ld | |
| | | operate in disconnected mode. This mode only really makes sense when yo | |
| | | u | |
| | | are using a proxy, of course. | |
| | | | |
| | | */ | |
| | | | |
|
| */ | | | |
| typedef enum _HTDisconnectedMode { | | typedef enum _HTDisconnectedMode { | |
| HT_DISCONNECT_NONE = 0, | | HT_DISCONNECT_NONE = 0, | |
| HT_DISCONNECT_NORMAL = 1, | | HT_DISCONNECT_NORMAL = 1, | |
| HT_DISCONNECT_EXTERNAL = 2 | | HT_DISCONNECT_EXTERNAL = 2 | |
| } HTDisconnectedMode; | | } HTDisconnectedMode; | |
| | | | |
| extern void HTCacheMode_setDisconnected (HTDisconnectedMode mode); | | extern void HTCacheMode_setDisconnected (HTDisconnectedMode mode); | |
| extern HTDisconnectedMode HTCacheMode_disconnected (void); | | extern HTDisconnectedMode HTCacheMode_disconnected (void); | |
| extern BOOL HTCacheMode_isDisconnected (HTReload mode); | | extern BOOL HTCacheMode_isDisconnected (HTReload mode); | |
|
| /* | | | |
| | | | |
| THE CACHE INDEX | | | |
| | | | |
|
| The persistent cache keeps an index of its current entries so that garba | | /* | |
| ge collection | | . | |
| and lookup becomes more efficient. This index is stored automatically at | | The Cache Index | |
| regular | | . | |
| intervals so that we don't get out of sync. Also, it is automatically lo | | | |
| aded at startup | | | |
| and saved at closedown of the cache. | | | |
| | | | |
|
| | | The persistent cache keeps an index of its current entries so that garbage | |
| | | collection and lookup becomes more efficient. This index is stored automati | |
| | | cally | |
| | | at regular intervals so that we don't get out of sync. Also, it is automati | |
| | | cally | |
| | | loaded at startup and saved at closedown of the cache. | |
| | | ( | |
| Reading the Cache Index | | Reading the Cache Index | |
|
| | | ) | |
| | | | |
|
| Read the saved set of cached entries from disk. we only allow the index | | Read the saved set of cached entries from disk. we only allow the index ro | |
| ro be read when | | be read when there is no entries in memory. That way we can ensure consista | |
| there is no entries in memory. That way we can ensure consistancy. | | ncy. | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCacheIndex_read (const char * cache_root); | | extern BOOL HTCacheIndex_read (const char * cache_root); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Write the Cache Index | | Write the Cache Index | |
|
| | | ) | |
| | | | |
|
| Walk through the list of cached objects and save them to disk. We overri | | Walk through the list of cached objects and save them to disk. We override | |
| de any existing | | any existing version but that is normally OK as we have already read its | |
| version but that is normally OK as we have already read its contents. | | contents. | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCacheIndex_write (const char * cache_root); | | extern BOOL HTCacheIndex_write (const char * cache_root); | |
|
| /* | | | |
| | | | |
|
| THE HTCACHE OBJECT | | /* | |
| | | . | |
| | | The HTCache Object | |
| | | . | |
| | | | |
|
| The cache object is what we store about a cached objet in memory. | | The cache object is what we store about a cached objet in memory. | |
| | | */ | |
| | | | |
|
| */ | | | |
| typedef struct _HTCache HTCache; | | typedef struct _HTCache HTCache; | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Create and Update a Cache Object | | Create and Update a Cache Object | |
|
| | | ) | |
| | | | |
|
| Filling the cache is done as all other transportation of bulk data in li | | Filling the cache is done as all other transportation of bulk data in libww | |
| bwww using | | w | |
| streams. The cache object creater is a stream which in many cases sits o | | using streams. The cache object creater is a | |
| n a T stream so | | stream which in many cases sits on a T stream so | |
| that we get the original feed and at the same time can parse the content | | that we get the original feed and at the same time can parse the contents. | |
| s. | | | |
| | | | |
|
| In some situations, we want to append data to an already exiting cache e | | In some situations, we want to append data to an already exiting cache entr | |
| ntry. This is | | y. | |
| the case when a use has interrupted a download and we are stuck with a s | | This is the case when a use has interrupted a download and we are stuck wit | |
| ubpart of the | | h | |
| document. If the user later on whishes to download the object again we c | | a subpart of the document. If the user later on whishes to download the obj | |
| an issue a | | ect | |
| range request and continue from where we were. This will in many situati | | again we can issue a range request and continue from where we were. This | |
| ons save a lot | | will in many situations save a lot of bandwidth. | |
| of bandwidth. | | */ | |
| | | | |
|
| */ | | | |
| extern HTConverter HTCacheWriter, HTCacheAppend; | | extern HTConverter HTCacheWriter, HTCacheAppend; | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| This function writes the metainformation along with the data object stor | | This function writes the metainformation along with the data object stored | |
| ed by the | | by the HTCacheWriter stream above. If no headers are available then the met | |
| HTCacheWriter stream above. If no headers are available then the meta fi | | a | |
| le is empty | | file is empty | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCache_writeMeta (HTCache * cache, HTRequest * request, | | extern BOOL HTCache_writeMeta (HTCache * cache, HTRequest * request, | |
| HTResponse * response); | | HTResponse * response); | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| In case we received a "304 Not Modified" response then we do not have to | | In case we received a "304 Not Modified" response then we do | |
| tough the body | | not have to tough the body but must merge the metainformation with the prev | |
| but must merge the metainformation with the previous version. Therefore | | ious | |
| we need a | | version. Therefore we need a special metainformation update function. | |
| special metainformation update function. | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCache_updateMeta (HTCache * cache, HTRequest * request, | | extern BOOL HTCache_updateMeta (HTCache * cache, HTRequest * request, | |
| HTResponse * response); | | HTResponse * response); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Check Cached Entry | | Check Cached Entry | |
|
| | | ) | |
| | | | |
|
| After we get a response back, we should check whether we can still cache | | After we get a response back, we should check whether we can still cache | |
| an entry | | an entry and/or we should add an entry for a resource that has just been | |
| and/or we should add an entry for a resource that has just been created | | created so that we can remember the etag and other things. The latter allow | |
| so that we can | | s | |
| remember the etag and other things. The latter allows us to guarantee th | | us to guarantee that we don't loose data due to the lost update problem. | |
| at we don't | | */ | |
| loose data due to the lost update problem. | | | |
| | | | |
|
| */ | | | |
| extern HTCache * HTCache_touch (HTRequest * request, HTResponse * response, | | extern HTCache * HTCache_touch (HTRequest * request, HTResponse * response, | |
| HTParentAnchor * anchor); | | HTParentAnchor * anchor); | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| | | ( | |
| Load a Cached Object | | Load a Cached Object | |
|
| | | ) | |
| | | | |
|
| Loading a cached object is also done as all other loads in libwww by usi | | Loading a cached object is also done as all other loads in libwww by using | |
| ng a protocol | | a protocol load module. For the moment, this load | |
| load module. For the moment, this load function handles the persistent c | | function handles the persistent cache as if it was on local file but in fac | |
| ache as if it | | t | |
| was on local file but in fact it could be anywhere. | | it could be anywhere. | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern HTProtCallback HTLoadCache; | | extern HTProtCallback HTLoadCache; | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Delete a Cache Object | | Delete a Cache Object | |
|
| | | ) | |
| | | | |
|
| Remove a HTCache object from memory and from disk. You must explicitly r | | Remove a HTCache object from memory and from disk. You must explicitly remo | |
| emove a lock | | ve | |
| before this operation can succeed | | a lock before this operation can succeed | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCache_remove (HTCache * cache); | | extern BOOL HTCache_remove (HTCache * cache); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Delete All Cache Objects in Memory | | Delete All Cache Objects in Memory | |
|
| | | ) | |
| | | | |
|
| Destroys all cache entried in memory but does not write anything to disk | | Destroys all cache entried in memory but does not write anything to disk. | |
| . Use the index | | Use the index methods above for doing that. We do not delete the disk conte | |
| methods above for doing that. We do not delete the disk contents. | | nts. | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCache_deleteAll (void); | | extern BOOL HTCache_deleteAll (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Delete all Cache Object and File Entries | | Delete all Cache Object and File Entries | |
|
| | | ) | |
| | | | |
|
| Destroys all cache entried in memory and on disk. This call basically re | | Destroys all cache entried in memory and on disk. This call basically | |
| sets the cache | | resets the cache to the inital state but it does not terminate the cache. | |
| to the inital state but it does not terminate the cache. That is, you do | | That is, you don't have to reinitialize the cache before you can use it aga | |
| n't have to | | in. | |
| reinitialize the cache before you can use it again. | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCache_flushAll (void); | | extern BOOL HTCache_flushAll (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Find a Cached Object | | Find a Cached Object | |
|
| | | ) | |
| | | | |
|
| Verifies if a cache object exists for this URL and if so returns a URL f | | Verifies if a cache object exists for this URL and if so returns a URL for | |
| or the cached | | the cached object. It does not verify whether the object is valid or not, | |
| object. It does not verify whether the object is valid or not, for examp | | for example it might have expired. Use the cache validation methods for che | |
| le it might | | cking | |
| have expired. Use the cache validation methods for checking this. | | this. | |
| | | */ | |
| | | | |
|
| */ | | | |
| extern HTCache * HTCache_find (HTParentAnchor * anchor); | | extern HTCache * HTCache_find (HTParentAnchor * anchor); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Verify if an Object is Fresh | | Verify if an Object is Fresh | |
|
| | | ) | |
| | | | |
|
| This function checks whether a document has expired or not. The check is | | This function checks whether a document has expired or not. The check is | |
| based on the | | based on the metainformation passed in the anchor object The function retur | |
| metainformation passed in the anchor object The function returns the lev | | ns | |
| el of | | the level of validation needed for getting a fresh version. We also check | |
| validation needed for getting a fresh version. We also check the cache c | | the cache control directives in the request to see if they change the fresh | |
| ontrol | | ness | |
| directives in the request to see if they change the freshness discission | | discission. | |
| . | | */ | |
| | | | |
|
| */ | | | |
| extern HTReload HTCache_isFresh (HTCache * me, HTRequest * request); | | extern HTReload HTCache_isFresh (HTCache * me, HTRequest * request); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Register a Cache Hit | | Register a Cache Hit | |
|
| | | ) | |
| | | | |
|
| As a cache hit may occur several places, we have a public function where | | As a cache hit may occur several places, we have a public function where | |
| we can declare | | we can declare a download to be a true cache hit. The number of hits a cach | |
| a download to be a true cache hit. The number of hits a cache object has | | e | |
| affects its | | object has affects its status when we are doing garbage collection. | |
| status when we are doing garbage collection. | | */ | |
| | | | |
|
| */ | | | |
| extern BOOL HTCache_addHit (HTCache * cache); | | extern BOOL HTCache_addHit (HTCache * cache); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Find the Location of a Cached Object | | Find the Location of a Cached Object | |
|
| | | ) | |
| | | | |
|
| Is we have a valid entry in the cache then we also need a location where | | Is we have a valid entry in the cache then we also need a location where | |
| we can get it. | | we can get it. Hopefully, we may be able to access it thourgh one of our | |
| Hopefully, we may be able to access it thourgh one of our protocol modul | | protocol modules, for example the local file module. | |
| es, for example | | The name returned is in URL syntax and must be freed by the caller | |
| the local file module. The name returned is in URL syntax and must be fr | | */ | |
| eed by the | | | |
| caller | | | |
| | | | |
|
| */ | | | |
| extern char * HTCache_name (HTCache * cache); | | extern char * HTCache_name (HTCache * cache); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Locking a Cache Object | | Locking a Cache Object | |
|
| | | ) | |
| | | | |
|
| While we are creating a new cache object or while we are validating an e | | While we are creating a new cache object or while we are validating an exis | |
| xisting one, we | | ting | |
| must have a lock on the entry so that not other requests can get to it i | | one, we must have a lock on the entry so that not other requests can get | |
| n the mean | | to it in the mean while. A lock can be broken if the same request tries to | |
| while. A lock can be broken if the same request tries to create the cach | | create the cache entry again. This means that we have tried to validate the | |
| e entry again. | | cache entry but we got a new shipment of bytes back from the origin server | |
| This means that we have tried to validate the cache entry but we got a n | | or an intermediary proxy. | |
| ew shipment of | | */ | |
| bytes back from the origin server or an intermediary proxy. | | | |
| | | | |
|
| */ | | | |
| extern BOOL HTCache_getLock (HTCache * cache, HTRequest * request); | | extern BOOL HTCache_getLock (HTCache * cache, HTRequest * request); | |
| extern BOOL HTCache_breakLock (HTCache * cache, HTRequest * request); | | extern BOOL HTCache_breakLock (HTCache * cache, HTRequest * request); | |
| extern BOOL HTCache_hasLock (HTCache * cache); | | extern BOOL HTCache_hasLock (HTCache * cache); | |
| extern BOOL HTCache_releaseLock (HTCache * cache); | | extern BOOL HTCache_releaseLock (HTCache * cache); | |
|
| | | | |
| /* | | /* | |
|
| | | */ | |
| | | | |
|
| */ | | | |
| #endif | | #endif | |
|
| /* | | | |
| | | | |
|
| ___________________________________ | | /* | |
| | | | |
|
| @(#) $Id: HTCache.html,v 2.22 1999/02/22 15:56
:04 kahan Exp $ | | @(#) $Id: HTCache.html,v 2.22 1999/02/22 15:56:04 kahan Exp $ | |
| | | | |
|
| */ | | */ | |
| | | | |
End of changes. 138 change blocks. |
| 242 lines changed or deleted | | 270 lines changed or added | |
|
| HTDialog.h | | HTDialog.h | |
| /* | | /* | |
| | | | |
|
| W3C Sample Code Library libwww messa
ges and dialogs | | W3C Sample Code Library libwww Messa
ges and Dialogs | |
| | | | |
| ! | | ! | |
| Application side Error Messages And the like | | Application side Error Messages And the like | |
| ! | | ! | |
| */ | | */ | |
| | | | |
| /* | | /* | |
| ** (c) COPYRIGHT MIT 1995. | | ** (c) COPYRIGHT MIT 1995. | |
| ** Please first read the full copyright statement in the file COPYRIGH. | | ** Please first read the full copyright statement in the file COPYRIGH. | |
| */ | | */ | |
| | | | |
| skipping to change at line 28 | | skipping to change at line 28 | |
| application going. The functionality of this module was originally in | | application going. The functionality of this module was originally in | |
| HTAccess, but now It is part of the | | HTAccess, but now It is part of the | |
| application interface which the application | | application interface which the application | |
| may use it if desired. | | may use it if desired. | |
| | | | |
| This module is implemented by HTHome.c, and it is | | This module is implemented by HTHome.c, and it is | |
| a part of the W3C Sample Code | | a part of the W3C Sample Code | |
| Library. | | Library. | |
| */ | | */ | |
| | | | |
|
| #ifndef HTMSG_H | | #ifndef HTDIALOG_H | |
| #define HTMSG_H | | #define HTDIALOG_H | |
| #include "WWWLib.h" | | #include "WWWLib.h" | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| English Error Messages and Progress Notifications | | Default English Error Messages and Progress Notifications | |
| . | | . | |
| | | | |
|
| | | The following functions provide a default set of error messages and prompts | |
| | | in plain English. You can of course change this as you like. | |
| | | ( | |
| | | Default English User Prompts and Questions | |
| | | ) | |
| | | | |
| | | This list corresponds to the enumeration list defined in the | |
| | | HTAlert module | |
| | | */ | |
| | | | |
| | | #define HT_MSG_ENGLISH_INITIALIZER \ | |
| | | "Please enter username:", \ | |
| | | "Please enter username for proxy authentication:", \ | |
| | | "Please enter username for this FTP server:", \ | |
| | | "Password:", \ | |
| | | "Please give name of file to save in:", \ | |
| | | "Plase enter account:", \ | |
| | | "You might not be allowed to use this method here, continue?", \ | |
| | | "Location has moved, continue?", \ | |
| | | "A new set of rules is requested to be added to your setup - continue?" | |
| | | , \ | |
| | | "This file already exists - replace existing file?", \ | |
| | | "Authentication failed - retry?", \ | |
| | | "Proxy authentication failed - retry?", \ | |
| | | "This method has already been performed - repeat operation?", \ | |
| | | "This document is very big - continue operation?", \ | |
| | | "The source document for this operation has moved - continue operation | |
| | | \ | |
| | | with new location?", \ | |
| | | "The destination document for this operation has moved - continue \ | |
| | | operation with new location?", \ | |
| | | "A redirection may change the behavior of this method - proceed anyway? | |
| | | ", \ | |
| | | "An automatic request for changing proxy has been encountered - continu | |
| | | e?", \ | |
| | | "The persistent cache is already in use by another user. If this is not | |
| | | \ | |
| | | the case then you can manually delete this lock and restart.", \ | |
| | | "The server has sent you a cookie - accept?" | |
| | | | |
| | | /* | |
| | | ( | |
| | | Default English Messages and Progress Notifications | |
| | | ) | |
| | | | |
| | | This list corresponds to the enumeration list defined in the | |
| | | HTError module | |
| | | */ | |
| | | | |
| | | /* CODE ERROR MESSAGE ERROR URL */ | |
| | | #define HTERR_ENGLISH_INITIALIZER \ | |
| | | { 100, "Continue", "information | |
| | | " }, \ | |
| | | { 101, "Switching Protocols", "information" }, \ | |
| | | { 200, "OK", "success" }, \ | |
| | | { 201, "Created", "success" }, \ | |
| | | { 202, "Accepted", "success" }, | |
| | | \ | |
| | | { 203, "Non-authoritative Information", "success" }, \ | |
| | | { 204, "Document Updated", "success" }, \ | |
| | | { 205, "Reset Content", "success" }, \ | |
| | | { 206, "Partial Content", "success" }, \ | |
| | | { 207, "Partial Update OK", "success" }, | |
| | | \ | |
| | | { 300, "Multiple Choices", "redirection" }, \ | |
| | | { 301, "Moved Permanently", "redirection | |
| | | " }, \ | |
| | | { 302, "Found", "redirection" }, \ | |
| | | { 303, "See Other", "redirection | |
| | | " }, \ | |
| | | { 304, "Not Modified", "redirection" }, \ | |
| | | { 305, "Use Proxy", "redirection | |
| | | " }, \ | |
| | | { 306, "Proxy Redirect", "redirection" }, \ | |
| | | { 307, "Temporary Redirect", "redirection" }, \ | |
| | | { 400, "Bad Request", "client_error" }, \ | |
| | | { 401, "Unauthorized", "client_error" }, \ | |
| | | { 402, "Payment Required", "client_erro | |
| | | r" }, \ | |
| | | { 403, "Forbidden", "client_error" }, \ | |
| | | { 404, "Not Found", "client_erro | |
| | | r" }, \ | |
| | | { 405, "Method Not Allowed", "client_error" }, \ | |
| | | { 406, "Not Acceptable", "client_error" }, \ | |
| | | { 407, "Proxy Authentication Required", "client_error" }, \ | |
| | | { 408, "Request Timeout", "client_error" }, \ | |
| | | { 409, "Conflict", "client_error" }, \ | |
| | | { 410, "Gone", "client_error" }, \ | |
| | | { 411, "Length Required", "client_error" }, \ | |
| | | { 412, "Precondition Failed", "client_error" }, \ | |
| | | { 413, "Request Entity Too Large", "client_error" }, \ | |
| | | { 414, "Request-URI Too Large", "client_error" }, \ | |
| | | { 415, "Unsupported Media Type", "client_error" }, \ | |
| | | { 416, "Range Not Satisfiable", "client_error" }, \ | |
| | | { 417, "Expectation Failed", "client_error" }, \ | |
| | | { 418, "Reauthentication Required", "client_erro | |
| | | r" }, \ | |
| | | { 419, "Proxy Reauthentication Reuired", "client_error" }, \ | |
| | | { 500, "Internal Server Error", "server_error" }, \ | |
| | | { 501, "Not Implemented", "server_error" }, \ | |
| | | { 502, "Bad Gateway", "server_error" }, \ | |
| | | { 503, "Service Unavailable", "server_error" }, \ | |
| | | { 504, "Gateway Timeout", "server_error" }, \ | |
| | | { 505, "HTTP Version not supported", "server_error" }, \ | |
| | | { 506, "Partial update Not Implemented", "server_error" }, \ | |
| | | \ | |
| | | /* Cache Warnings */ \ | |
| | | { 10, "Response is Stale", "cache" }, \ | |
| | | { 11, "Revalidation Failed", "cache" }, \ | |
| | | { 12, "Disconnected Opeartion", "cache" }, \ | |
| | | { 13, "Heuristic Expiration", "cache" }, \ | |
| | | { 14, "Transformation Applied", "cache" }, \ | |
| | | { 99, "Cache warning", "cache" }, \ | |
| | | \ | |
| | | /* Non-HTTP Error codes and warnings */ \ | |
| | | { 0, "Can't locate remote host", "internal" } | |
| | | , \ | |
| | | { 0, "No host name found", "internal" }, \ | |
| | | { 0, "No file name found or file not accessible", "internal" }, \ | |
| | | { 0, "FTP server replies", "internal" }, \ | |
| | | { 0, "FTP server doesn't reply", "internal" } | |
| | | , \ | |
| | | { 0, "FTP login failure", "internal" }, \ | |
| | | { 0, "Server timed out", "internal" } | |
| | | , \ | |
| | | { 0, "Gopher-server replies", "internal" }, \ | |
| | | { 0, "Data transfer interrupted", "internal" }, \ | |
| | | { 0, "Connection establishment interrupted", "internal" }, \ | |
| | | { 0, "CSO-server replies", "internal" }, \ | |
| | | { 0, "This is probably a HTTP server 0.9 or less","internal" }, \ | |
| | | { 0, "Bad, Incomplete, or Unknown Response", "internal" }, \ | |
| | | { 0, "Unknown access authentication scheme", "internal" }, \ | |
| | | { 0, "News-server replies", "internal" }, \ | |
| | | { 0, "Trying `ftp://' instead of `file://'", "internal" }, \ | |
| | | { 0, "Too many redirections", "internal" }, \ | |
| | | { 0, "Method not suited for automatic redirection","internal" }, \ | |
| | | { 0, "Premature End Of File", "internal" }, \ | |
| | | { 0, "Response from WAIS Server too Large - Extra lines \ | |
| | | ignored","internal"}, \ | |
| | | { 0, "WAIS-server doesn't return any data", "internal" }, \ | |
| | | { 0, "Can't connect to WAIS-server", "internal" }, \ | |
| | | { 0, "operation failed", "internal" }, \ | |
| | | { 0, "Wrong or unknown access scheme", "internal" }, \ | |
| | | { 0, "Access scheme not allowed in this context", "internal" } | |
| | | , \ | |
| | | { 0, "When you are connected, you can log in", "internal" }, \ | |
| | | { 0, "This version has expired and will be automatically reloaded", " | |
| | | internal" }, \ | |
| | | { 0, "Loading new rules must be explicitly acknowledged", "internal" | |
| | | }, \ | |
| | | { 0, "Automatic proxy redirection must be explicitly acknowledged", " | |
| | | internal" } | |
| | | | |
| | | /* | |
| | | ( | |
| | | Generate a Default Error Message | |
| | | ) | |
| | | | |
| This function provides an unformatted English string containing the possibl
y | | This function provides an unformatted English string containing the possibl
y | |
| nested status message that explains the result of a request. This is essent
ially | | nested status message that explains the result of a request. This is essent
ially | |
| "flattening out" the information provided in the request | | "flattening out" the information provided in the request | |
| error strack. The string must be freed by the caller. | | error strack. The string must be freed by the caller. | |
| */ | | */ | |
| | | | |
| extern char * HTDialog_errorMessage (HTRequest * request, HTAlertOpcode op, | | extern char * HTDialog_errorMessage (HTRequest * request, HTAlertOpcode op, | |
| int msgnum, const char * dfault, | | int msgnum, const char * dfault, | |
| void * input); | | void * input); | |
| | | | |
| /* | | /* | |
|
| | | ( | |
| | | Generate a Default Progress Notification Message | |
| | | ) | |
| | | | |
| This function provides a string containin an English progress message that | | This function provides a string containin an English progress message that | |
| the application can present to the user if desired. The string must be free
d | | the application can present to the user if desired. The string must be free
d | |
| by the caller. | | by the caller. | |
| */ | | */ | |
| | | | |
| extern char * HTDialog_progressMessage (HTRequest * request, HTAlertOpcode
op, | | extern char * HTDialog_progressMessage (HTRequest * request, HTAlertOpcode
op, | |
| int msgnum, const char * dfault, | | int msgnum, const char * dfault, | |
| void * input); | | void * input); | |
| | | | |
| | | | |
| skipping to change at line 171 | | skipping to change at line 311 | |
| can then be multi-linguistic. | | can then be multi-linguistic. | |
| */ | | */ | |
| | | | |
| extern BOOL HTError_response (HTRequest * request, HTAlertOpcode op, | | extern BOOL HTError_response (HTRequest * request, HTAlertOpcode op, | |
| int msgnum, const char * dfault, void * input, | | int msgnum, const char * dfault, void * input, | |
| HTAlertPar * reply); | | HTAlertPar * reply); | |
| | | | |
| /* | | /* | |
| */ | | */ | |
| | | | |
|
| #endif /* HTHOME_H */ | | #endif /* HTDIALOG_H */ | |
| | | | |
| /* | | /* | |
| | | | |
|
| @(#) $Id: HTDialog.html,v 2.8 1998/10/13 19:18:30 frystyk Exp $ | | @(#) $Id: HTDialog.html,v 2.9 1999/04/01 19:35:39 frystyk Exp $ | |
| | | | |
| */ | | */ | |
| | | | |
End of changes. 7 change blocks. |
| 6 lines changed or deleted | | 167 lines changed or added | |
|
| HTError.h | | HTError.h | |
| | | | |
| skipping to change at line 48 | | skipping to change at line 48 | |
| ERR_FATAL = 0x1, | | ERR_FATAL = 0x1, | |
| ERR_NON_FATAL = 0x2, | | ERR_NON_FATAL = 0x2, | |
| ERR_WARN = 0x4, | | ERR_WARN = 0x4, | |
| ERR_INFO = 0x8 | | ERR_INFO = 0x8 | |
| } HTSeverity; | | } HTSeverity; | |
| | | | |
| #include "HTReq.h" | | #include "HTReq.h" | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Error Codes and Messages | | | |
| . | | | |
| | | | |
| Note: All non-HTTP error codes have (index number > | | | |
| HTERR_HTTP_CODES), and they will not be shown in the error-message | | | |
| generated. | | | |
| ( | | | |
| The Error Message Object | | The Error Message Object | |
|
| ) | | . | |
| | | | |
| An error consists of a messsage code, a short, natural language specific | | An error consists of a messsage code, a short, natural language specific | |
| message, and a URI which can point to more information. This module also | | message, and a URI which can point to more information. This module also | |
| provides a default set of error objects with English text. | | provides a default set of error objects with English text. | |
| Errors are registered together with a severity and you can also set the mod
e | | Errors are registered together with a severity and you can also set the mod
e | |
| for what class of error severities should be shown and which | | for what class of error severities should be shown and which | |
| should be ignored. | | should be ignored. | |
| */ | | */ | |
| | | | |
| typedef struct _HTErrorMessage { | | typedef struct _HTErrorMessage { | |
| int code; /* Error number */ | | int code; /* Error number */ | |
| char * msg; /* Short explanation */ | | char * msg; /* Short explanation */ | |
| char * url; /* Explaning URL */ | | char * url; /* Explaning URL */ | |
| } HTErrorMessage; | | } HTErrorMessage; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| Error Message Index | | Error Message Index | |
| ) | | ) | |
| | | | |
|
| | | Note: All non-HTTP error codes have (index number > | |
| | | HTERR_HTTP_CODES), and they will not be shown in the error-message | |
| | | generated. | |
| | | | |
| Error codes are registered in an array where the following enumerations ser
ve | | Error codes are registered in an array where the following enumerations ser
ve | |
|
| as an index. They must not be replaced! | | as an index. They must not be replaced! See the | |
| | | HTDialog module for default initialization | |
| | | of these messages. | |
| */ | | */ | |
| | | | |
| typedef enum _HTErrorElement { | | typedef enum _HTErrorElement { | |
| HTERR_CONTINUE = 0, /* 100 */ | | HTERR_CONTINUE = 0, /* 100 */ | |
| HTERR_SWITCHING, /* 101 */ | | HTERR_SWITCHING, /* 101 */ | |
| HTERR_OK, /* 200 */ | | HTERR_OK, /* 200 */ | |
| HTERR_CREATED, /* 201 */ | | HTERR_CREATED, /* 201 */ | |
| HTERR_ACCEPTED, /* 202 */ | | HTERR_ACCEPTED, /* 202 */ | |
| HTERR_NON_AUTHORITATIVE, /* 203 */ | | HTERR_NON_AUTHORITATIVE, /* 203 */ | |
| HTERR_NO_CONTENT, /* 204 */ | | HTERR_NO_CONTENT, /* 204 */ | |
| | | | |
| skipping to change at line 175 | | skipping to change at line 174 | |
| HTERR_NO_AUTO_PROXY, | | HTERR_NO_AUTO_PROXY, | |
| HTERR_ELEMENTS /* This MUST be the last element
*/ | | HTERR_ELEMENTS /* This MUST be the last element
*/ | |
| } HTErrorElement; | | } HTErrorElement; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| Default English Language Messages | | Default English Language Messages | |
| ) | | ) | |
| | | | |
| Default set of error messages arranged in an array into which the | | Default set of error messages arranged in an array into which the | |
|
| index codes serve as index. These error objects can | | index codes serve as index. See the | |
| of course be initialized as you like. | | HTDialog module for default initialization | |
| */ | | of these strings. | |
| | | | |
| /* CODE ERROR MESSAGE ERROR URL */ | | | |
| #define HTERR_ENGLISH_INITIALIZER \ | | | |
| { 100, "Continue", "information | | | |
| " }, \ | | | |
| { 101, "Switching Protocols", "information" }, \ | | | |
| { 200, "OK", "success" }, \ | | | |
| { 201, "Created", "success" }, \ | | | |
| { 202, "Accepted", "success" }, | | | |
| \ | | | |
| { 203, "Non-authoritative Information", "success" }, \ | | | |
| { 204, "Document Updated", "success" }, \ | | | |
| { 205, "Reset Content", "success" }, \ | | | |
| { 206, "Partial Content", "success" }, \ | | | |
| { 207, "Partial Update OK", "success" }, | | | |
| \ | | | |
| { 300, "Multiple Choices", "redirection" }, \ | | | |
| { 301, "Moved Permanently", "redirection | | | |
| " }, \ | | | |
| { 302, "Found", "redirection" }, \ | | | |
| { 303, "See Other", "redirection | | | |
| " }, \ | | | |
| { 304, "Not Modified", "redirection" }, \ | | | |
| { 305, "Use Proxy", "redirection | | | |
| " }, \ | | | |
| { 306, "Proxy Redirect", "redirection" }, \ | | | |
| { 307, "Temporary Redirect", "redirection" }, \ | | | |
| { 400, "Bad Request", "client_error" }, \ | | | |
| { 401, "Unauthorized", "client_error" }, \ | | | |
| { 402, "Payment Required", "client_erro | | | |
| r" }, \ | | | |
| { 403, "Forbidden", "client_error" }, \ | | | |
| { 404, "Not Found", "client_erro | | | |
| r" }, \ | | | |
| { 405, "Method Not Allowed", "client_error" }, \ | | | |
| { 406, "Not Acceptable", "client_error" }, \ | | | |
| { 407, "Proxy Authentication Required", "client_error" }, \ | | | |
| { 408, "Request Timeout", "client_error" }, \ | | | |
| { 409, "Conflict", "client_error" }, \ | | | |
| { 410, "Gone", "client_error" }, \ | | | |
| { 411, "Length Required", "client_error" }, \ | | | |
| { 412, "Precondition Failed", "client_error" }, \ | | | |
| { 413, "Request Entity Too Large", "client_error" }, \ | | | |
| { 414, "Request-URI Too Large", "client_error" }, \ | | | |
| { 415, "Unsupported Media Type", "client_error" }, \ | | | |
| { 416, "Range Not Satisfiable", "client_error" }, \ | | | |
| { 417, "Expectation Failed", "client_error" }, \ | | | |
| { 418, "Reauthentication Required", "client_erro | | | |
| r" }, \ | | | |
| { 419, "Proxy Reauthentication Reuired", "client_error" }, \ | | | |
| { 500, "Internal Server Error", "server_error" }, \ | | | |
| { 501, "Not Implemented", "server_error" }, \ | | | |
| { 502, "Bad Gateway", "server_error" }, \ | | | |
| { 503, "Service Unavailable", "server_error" }, \ | | | |
| { 504, "Gateway Timeout", "server_error" }, \ | | | |
| { 505, "HTTP Version not supported", "server_error" }, \ | | | |
| { 506, "Partial update Not Implemented", "server_error" }, \ | | | |
| \ | | | |
| /* Cache Warnings */ \ | | | |
| { 10, "Response is Stale", "cache" }, \ | | | |
| { 11, "Revalidation Failed", "cache" }, \ | | | |
| { 12, "Disconnected Opeartion", "cache" }, \ | | | |
| { 13, "Heuristic Expiration", "cache" }, \ | | | |
| { 14, "Transformation Applied", "cache" }, \ | | | |
| { 99, "Cache warning", "cache" }, \ | | | |
| \ | | | |
| /* Non-HTTP Error codes and warnings */ \ | | | |
| { 0, "Can't locate remote host", "internal" } | | | |
| , \ | | | |
| { 0, "No host name found", "internal" }, \ | | | |
| { 0, "No file name found or file not accessible", "internal" }, \ | | | |
| { 0, "FTP server replies", "internal" }, \ | | | |
| { 0, "FTP server doesn't reply", "internal" } | | | |
| , \ | | | |
| { 0, "FTP login failure", "internal" }, \ | | | |
| { 0, "Server timed out", "internal" } | | | |
| , \ | | | |
| { 0, "Gopher-server replies", "internal" }, \ | | | |
| { 0, "Data transfer interrupted", "internal" }, \ | | | |
| { 0, "Connection establishment interrupted", "internal" }, \ | | | |
| { 0, "CSO-server replies", "internal" }, \ | | | |
| { 0, "This is probably a HTTP server 0.9 or less","internal" }, \ | | | |
| { 0, "Bad, Incomplete, or Unknown Response", "internal" }, \ | | | |
| { 0, "Unknown access authentication scheme", "internal" }, \ | | | |
| { 0, "News-server replies", "internal" }, \ | | | |
| { 0, "Trying `ftp://' instead of `file://'", "internal" }, \ | | | |
| { 0, "Too many redirections", "internal" }, \ | | | |
| { 0, "Method not suited for automatic redirection","internal" }, \ | | | |
| { 0, "Premature End Of File", "internal" }, \ | | | |
| { 0, "Response from WAIS Server too Large - Extra lines \ | | | |
| ignored","internal"}, \ | | | |
| { 0, "WAIS-server doesn't return any data", "internal" }, \ | | | |
| { 0, "Can't connect to WAIS-server", "internal" }, \ | | | |
| { 0, "operation failed", "internal" }, \ | | | |
| { 0, "Wrong or unknown access scheme", "internal" }, \ | | | |
| { 0, "Access scheme not allowed in this context", "internal" } | | | |
| , \ | | | |
| { 0, "When you are connected, you can log in", "internal" }, \ | | | |
| { 0, "This version has expired and will be automatically reloaded", " | | | |
| internal" }, \ | | | |
| { 0, "Loading new rules must be explicitly acknowledged", "internal" | | | |
| }, \ | | | |
| { 0, "Automatic proxy redirection must be explicitly acknowledged", " | | | |
| internal" } | | | |
| | | | |
| /* | | | |
| . | | . | |
| What Errors should be Ignored or Passed Through? | | What Errors should be Ignored or Passed Through? | |
| . | | . | |
| | | | |
| This variable dictates which errors should be put out when generating the | | This variable dictates which errors should be put out when generating the | |
| message to the user. The first four enumerations make it possible to see | | message to the user. The first four enumerations make it possible to see | |
| `everything as bad or worse than' this level, e.g. HT_ERR_SHOW_NON_FATAL | | `everything as bad or worse than' this level, e.g. HT_ERR_SHOW_NON_FATAL | |
| shows messages of type HT_ERR_SHOW_NON_FATAL and | | shows messages of type HT_ERR_SHOW_NON_FATAL and | |
| HT_ERR_SHOW_FATAL. | | HT_ERR_SHOW_FATAL. | |
| | | | |
| | | | |
| skipping to change at line 436 | | skipping to change at line 345 | |
| ( | | ( | |
| Where did it happen? | | Where did it happen? | |
| ) | | ) | |
| */ | | */ | |
| | | | |
| extern const char * HTError_location (HTError * info); | | extern const char * HTError_location (HTError * info); | |
| | | | |
| /* | | /* | |
| */ | | */ | |
| | | | |
|
| #endif | | #endif /* HTERROR_H */ | |
| | | | |
| /* | | /* | |
| | | | |
|
| @(#) $Id: HTError.html,v 2.49 1998/10/26 21:36:25 frystyk Exp $ | | @(#) $Id: HTError.html,v 2.50 1999/04/01 19:35:39 frystyk Exp $ | |
| | | | |
| */ | | */ | |
| | | | |
End of changes. 7 change blocks. |
| 120 lines changed or deleted | | 13 lines changed or added | |
|
| HTInit.h | | HTInit.h | |
|
| /* W3C Sample Code Library libwww Defa | | /* | |
| ult Initialization | | | |
| DEFAULT INITIALIZATION METHODS | | W3C Sample Code Library libwww Defau | |
| | | lt Initialization | |
| | | | |
| | | ! | |
| | | Default Initialization Methods | |
| | | ! | |
| | | */ | |
| | | | |
|
| */ | | | |
| /* | | /* | |
|
| ** (c) COPYRIGHT MIT 1995. | | ** (c) COPYRIGHT MIT 1995. | |
| ** Please first read the full copyright statement in the file COPYRIGH | | ** Please first read the full copyright statement in the file COPYRIGH. | |
| . | | | |
| */ | | */ | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| As mentioned in the Library Architecture, libwww consists of a small cor | | As mentioned in the Library Architecture, | |
| e and a large | | libwww consists of a small core and a large set of hooks for adding | |
| set of hooks for adding functionality. By itself, the core it not capabl | | functionality. By itself, the core it not capable of performing any Web rel | |
| e of performing | | ated | |
| any Web related tasks like accessing a HTTP server or parsing a HTML doc | | tasks like accessing a HTTP server or parsing a HTML document. All this | |
| ument. All this | | functionality must be registered by the application. This way, the core of | |
| functionality must be registered by the application. This way, the core | | libwww is kept application independent and can be used as the basic buildin | |
| of libwww is | | g | |
| kept application independent and can be used as the basic building block | | block for any kind of Web application. The Library comes with a large set | |
| for any kind | | of default functions, for example for accessing HTTP and FTP servers, parsi | |
| of Web application. The Library comes with a large set of default functi | | ng | |
| ons, for | | RFC | |
| example for accessing HTTP and FTP servers, parsing RFC 822 headers etc. | | 822 headers etc. This module helps the application programmer setting | |
| This module | | up all this functionality, but it is important to note that none of it is | |
| helps the application programmer setting up all this functionality, but | | required in order to use the Library. | |
| it is important | | | |
| to note that none of it is required in order to use the Library. | | | |
| | | | |
|
| This module is implemented by HTInit.c, and it is a part of the W3C Samp | | This module is implemented by HTInit.c, and it is | |
| le Code | | a part of the W3C Sample Code | |
| Library. You can also have a look at the other Initialization modules. | | Library. You can also have a look at the other | |
| | | Initialization modules. | |
| | | */ | |
| | | | |
|
| */ | | | |
| #ifndef HTINIT_H | | #ifndef HTINIT_H | |
| #define HTINIT_H | | #define HTINIT_H | |
| #include "WWWLib.h" | | #include "WWWLib.h" | |
| #include "WWWApp.h" | | #include "WWWApp.h" | |
|
| /* | | | |
| | | | |
|
| DEFAULT TRANSPORT PROTOCOL MODULES | | /* | |
| | | . | |
| | | Default Transport Protocol Modules | |
| | | . | |
| | | | |
|
| Register the default set of transport protocols. | | Register the default set of transport protocols. | |
| | | */ | |
| | | | |
|
| */ | | | |
| #include "WWWTrans.h" | | #include "WWWTrans.h" | |
| | | | |
| extern void HTTransportInit (void); | | extern void HTTransportInit (void); | |
|
| /* | | | |
| | | | |
|
| DEFAULT PROTOCOL MODULES | | /* | |
| | | . | |
| | | Default Protocol Modules | |
| | | . | |
| | | | |
|
| Set up default bindings between access schemes and the set of protocol m | | Set up default bindings between access schemes and the set of protocol modu | |
| odules in the | | les | |
| Library. The preemptive version registers all protocol modules to use bl | | in the Library. The preemptive version registers all protocol modules to | |
| ocking sockets. | | use blocking sockets. | |
| | | */ | |
| | | | |
|
| */ | | | |
| #include "WWWHTTP.h" | | #include "WWWHTTP.h" | |
| #include "WWWFile.h" | | #include "WWWFile.h" | |
| #include "WWWFTP.h" | | #include "WWWFTP.h" | |
| #include "WWWGophe.h" | | #include "WWWGophe.h" | |
| #include "WWWTelnt.h" | | #include "WWWTelnt.h" | |
| #include "WWWNews.h" | | #include "WWWNews.h" | |
| | | | |
| #ifdef HT_DIRECT_WAIS | | #ifdef HT_DIRECT_WAIS | |
| #include "WWWWAIS.h" | | #include "WWWWAIS.h" | |
| #endif | | #endif | |
| | | | |
| #ifndef FTP_PORT | | #ifndef FTP_PORT | |
|
| #define FTP_PORT 21 | | #define FTP_PORT 21 | |
| #endif | | #endif | |
| #ifndef NEWS_PORT | | #ifndef NEWS_PORT | |
|
| #define NEWS_PORT 119 | | #define NEWS_PORT 119 | |
| #endif | | #endif | |
| #ifndef GOPHER_PORT | | #ifndef GOPHER_PORT | |
|
| #define GOPHER_PORT 70 | | #define GOPHER_PORT 70 | |
| #endif | | #endif | |
| #ifndef WAIS_PORT | | #ifndef WAIS_PORT | |
|
| #define WAIS_PORT 666 | | #define WAIS_PORT 666 | |
| #endif | | #endif | |
| #ifndef HTTP_PORT | | #ifndef HTTP_PORT | |
|
| #define HTTP_PORT 80 | | #define HTTP_PORT 80 | |
| #endif | | #endif | |
| | | | |
|
| #define HTAccessInit HTProtocolInit | | #define HTAccessInit HTProtocolInit | |
| | | | |
| extern void HTProtocolInit (void); | | extern void HTProtocolInit (void); | |
| | | | |
| extern void HTProtocolPreemptiveInit (void); | | extern void HTProtocolPreemptiveInit (void); | |
|
| /* | | | |
| | | | |
|
| DEFAULT MIME PARSERS | | /* | |
| | | . | |
| | | Default MIME Parsers | |
| | | . | |
| | | | |
|
| The core doesn't have any built in MIME parsers, but many of the protoco | | The core doesn't have any built in MIME parsers, but many of the protocols | |
| ls need them. | | need them. For instance, many elements of the library rely on the | |
| For instance, many elements of the library rely on the Content-Length be | | Content-Length being correctly set. HTMIMEInit() | |
| ing correctly | | provides the minimal functionality needed for library reliabilty. | |
| set. HTMIMEInit() provides the minimal functionality needed for library | | */ | |
| reliabilty. | | | |
| | | | |
|
| */ | | | |
| #include "WWWMIME.h" | | #include "WWWMIME.h" | |
| #include "WWWApp.h" | | #include "WWWApp.h" | |
| | | | |
| extern void HTMIMEInit (void); | | extern void HTMIMEInit (void); | |
|
| /* | | | |
| | | | |
|
| DEFAULT EVENT MANAGER | | /* | |
| | | . | |
| | | Default Event Manager | |
| | | . | |
| | | | |
|
| libwww core does not have any default event loop - it has to be added by | | libwww core does not have any default event loop - it has to be added by | |
| the | | the application. However, it does come with an example implementation thta | |
| application. However, it does come with an example implementation thta m | | may be used. This implementation is based on a select system | |
| ay be used. | | call using non-blocking and interleaved sockets. | |
| This implementation is based on a select system call using non-blocking | | */ | |
| and interleaved | | | |
| sockets. | | | |
| | | | |
|
| */ | | | |
| #include "WWWApp.h" | | #include "WWWApp.h" | |
|
| /* | | | |
| | | | |
|
| DEFAULT MEDIA TYPE CONVERSIONS | | /* | |
| | | . | |
| | | Default Media Type Conversions | |
| | | . | |
| | | | |
|
| The Converters are used to convert a media type to another media type, o | | The Converters are used to convert a media type to another media | |
| r to present it | | type, or to present it on screen. This is a part of the stream stack algori | |
| on screen. This is a part of the stream stack algorithm. The Presenters | | thm. | |
| are also used | | The Presenters are also used in the stream stack, but are initialized separ | |
| in the stream stack, but are initialized separately. | | ately. | |
| | | */ | |
| | | | |
|
| */ | | | |
| #include "WWWMIME.h" | | #include "WWWMIME.h" | |
| #include "WWWHTML.h" | | #include "WWWHTML.h" | |
| #include "WWWStream.h" | | #include "WWWStream.h" | |
| #include "WWWDir.h" | | #include "WWWDir.h" | |
| #include "WWWCache.h" | | #include "WWWCache.h" | |
| | | | |
| #ifdef HT_EXPAT | | #ifdef HT_EXPAT | |
| #include "WWWXML.h" | | #include "WWWXML.h" | |
| #endif | | #endif | |
| | | | |
|
| extern void HTConverterInit (HTList * conversions); | | extern void HTConverterInit (HTList * conversions); | |
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Presenters | | Presenters | |
|
| | | ) | |
| | | | |
|
| The Presenters are used to present a media type to the use by calling an | | The Presenters are used to present a media type to the use by calling | |
| external | | an external program, for example a post script viewer. This is a part of | |
| program, for example a post script viewer. This is a part of the stream | | the stream stack algorithm. The Converters are also used in the stream | |
| stack | | stack, but are initialized separately. The Presenters use the same | |
| algorithm. The Converters are also used in the stream stack, but are ini | | include files as the Converters. | |
| tialized | | */ | |
| separately. The Presenters use the same include files as the Converters. | | | |
| | | | |
|
| */ | | extern void HTPresenterInit (HTList * conversions); | |
| extern void HTPresenterInit (HTList * conversions); | | | |
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Converters and Presenters | | Converters and Presenters | |
|
| | | ) | |
| | | | |
|
| This function is only defined in order to preserve backward compatibilit | | This function is only defined in order to preserve backward compatibility. | |
| y. | | */ | |
| | | | |
| */ | | | |
| extern void HTFormatInit (HTList * conversions); | | | |
| /* | | | |
| | | | |
|
| DEFAULT TRANSFER ENCODINGS | | extern void HTFormatInit (HTList * conversions); | |
| | | | |
|
| Transfer encoders and decoders can handle encodings like chunked etc. | | /* | |
| | | . | |
| | | Default Transfer Encodings | |
| | | . | |
| | | | |
|
| */ | | Transfer encoders and decoders can handle encodings like chunked | |
| | | etc. | |
| | | */ | |
| #include "WWWHTTP.h" | | #include "WWWHTTP.h" | |
| | | | |
|
| extern void HTTransferEncoderInit (HTList * encodings); | | extern void HTTransferEncoderInit (HTList * encodings); | |
| /* | | | |
| | | | |
| DEFAULT CONTENT ENCODINGS | | | |
| | | | |
|
| Content encoders and decoders can handle encodings like deflate etc. | | /* | |
| | | . | |
| | | Default Content Encodings | |
| | | . | |
| | | | |
|
| */ | | Content encoders and decoders can handle encodings like deflate | |
| | | etc. | |
| | | */ | |
| #include "WWWZip.h" | | #include "WWWZip.h" | |
| | | | |
|
| extern void HTContentEncoderInit (HTList * encodings); | | extern void HTContentEncoderInit (HTList * encodings); | |
| /* | | | |
| | | | |
| DEFAULT BEFORE AND AFTER FILTERS | | | |
| | | | |
|
| This module provides a set of default BEFORE and AFTER filters that can | | /* | |
| be registered | | . | |
| by the Net manager to be called before and after a request. All filters | | Default BEFORE and AFTER Filters | |
| can be | | . | |
| registered either to be called globally (all requests) or locally (pr re | | | |
| quest basis). | | | |
| Not done automaticly - may be done by application! | | | |
| | | | |
|
| | | This module provides a set of default BEFORE and AFTER filters | |
| | | that can be registered by the Net manager to be | |
| | | called before and after a request. All filters can be registered either to | |
| | | be called globally (all requests) or locally (pr request basis). | |
| | | Not done automaticly - may be done by application! | |
| | | ( | |
| BEFORE Filters | | BEFORE Filters | |
|
| | | ) | |
| | | | |
|
| The BEFORE filters handle proxies, caches, rule files etc. The filters a | | The BEFORE filters handle proxies, caches, rule | |
| re called in | | files etc. The filters are called in the order by which the are registered | |
| the order by which the are registered | | */ | |
| | | | |
| */ | | | |
| #include "WWWApp.h" | | #include "WWWApp.h" | |
| | | | |
| extern void HTBeforeInit (void); | | extern void HTBeforeInit (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| AFTER Filters | | AFTER Filters | |
|
| | | ) | |
| | | | |
|
| The AFTER filters handle error messages, logging, redirection, authentic | | The AFTER filters handle error messages, logging, redirection, | |
| ation etc. The | | authentication etc. The filters are called in the order by which the are | |
| filters are called in the order by which the are registered | | registered | |
| | | */ | |
| */ | | | |
| extern void HTAfterInit (void); | | extern void HTAfterInit (void); | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| BEFORE and AFTER Filters | | BEFORE and AFTER Filters | |
|
| | | ) | |
| | | | |
|
| This is just a short cut for registrating both BEFORE and AFTER at once | | This is just a short cut for registrating both BEFORE and AFTER | |
| | | at once | |
| */ | | */ | |
| extern void HTNetInit (void); | | extern void HTNetInit (void); | |
|
| /* | | | |
| | | | |
| DEFAULT ACCESS AUTHENTICATION MODULES | | | |
| | | | |
| The Access Manager which is implemented as a BEFORE and an AFTER filter | | | |
| (automatically | | | |
| registered in HTNetInit()) does not by default know of any access authen | | | |
| tication | | | |
| schemes. As everything else, this must be registered! This function does | | | |
| the job and | | | |
| should be all you need. | | | |
| | | | |
|
| */ | | | |
| extern void HTAAInit (void); | | | |
| /* | | /* | |
|
| | | . | |
| | | Default Access Authentication Modules | |
| | | . | |
| | | | |
|
| DEFAULT MESSAGE AND DIALOG FUNCTIONS | | The Access Manager which is implemented as a | |
| | | BEFORE and an AFTER filter (automatically registered in | |
| | | HTNetInit()) does not by default know of any access authentication | |
| | | schemes. As everything else, this must be registered! This function does | |
| | | the job and should be all you need. | |
| | | */ | |
| | | extern void HTAAInit (void); | |
| | | | |
|
| We register a set of alert messages Not done automaticly - may be done b | | /* | |
| y application! | | . | |
| | | Default Message and Dialog Functions | |
| | | . | |
| | | | |
|
| */ | | We register a set of alert messages Not done automaticly - may be done by | |
| | | application! | |
| | | */ | |
| #include "WWWApp.h" | | #include "WWWApp.h" | |
| | | | |
| extern void HTAlertInit (void); | | extern void HTAlertInit (void); | |
|
| /* | | | |
| | | | |
| DEFAULT ICONS FOR DIRECTORY LISTINGS | | | |
| | | | |
|
| The WWWDir interface contains support for including references (URLs and | | /* | |
| ALT text tags) | | . | |
| to icons in directory listings. The icons are selected as a function of | | Default Icons for Directory Listings | |
| the media type | | . | |
| and the content encoding of the file in question. That is - you can set | | | |
| up icons for | | | |
| compressed files, postscript files etc. There is also a small set of spe | | | |
| cific icons | | | |
| representing directories etc. | | | |
| | | | |
|
| */ | | The WWWDir interface contains support for including | |
| | | references (URLs and ALT text tags) to icons in directory listings. | |
| | | The icons are selected as a function of the media type and the content enco | |
| | | ding | |
| | | of the file in question. That is - you can set up icons for compressed file | |
| | | s, | |
| | | postscript files etc. There is also a small set of specific icons represent | |
| | | ing | |
| | | directories etc. | |
| | | */ | |
| #include "WWWFile.h" | | #include "WWWFile.h" | |
| | | | |
| extern void HTIconInit (const char * url_prefix); | | extern void HTIconInit (const char * url_prefix); | |
|
| | | | |
| /* | | /* | |
|
| | | */ | |
| | | | |
|
| */ | | | |
| #endif | | #endif | |
|
| /* | | | |
| | | | |
|
| ___________________________________ | | /* | |
| | | | |
|
| @(#) $Id: HTInit.html,v 2.53 1999/02/22 23:34:3
4 frystyk Exp $ | | @(#) $Id: HTInit.html,v 2.53 1999/02/22 23:34:34 frystyk Exp $ | |
| | | | |
|
| */ | | */ | |
| | | | |
End of changes. 76 change blocks. |
| 159 lines changed or deleted | | 176 lines changed or added | |
|
| HTLink.h | | HTLink.h | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| W3C Sample Code Library libwww Link
Class | | W3C Sample Code Library libwww Link
Class | |
| | | | |
|
| ! | | !The Link Class! | |
| The Link Class | | | |
| ! | | | |
| */ | | */ | |
|
| | | | |
| /* | | /* | |
|
| ** (c) COPYRIGHT MIT 1995. | | ** (c) COPYRIGHT MIT 1995. | |
| ** Please first read the full copyright statement in the file COPYRIGH. | | ** Please first read the full copyright statement in the file COPYRI | |
| | | GH. | |
| */ | | */ | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| A Link represents the link between anchor objects. | | The HTLink class represents links between anchor objects. By keeping the li | |
| By keeping the link as a object and not as part of the anchor we are capabl | | nk as a object and | |
| e | | not as part of the anchor we are capable of handling link semantics in a mu | |
| of handling link semantics in a much more organized way. For example, we | | ch | |
| can then search for link types among all the link objects that we have crea | | more organized way. For example, we can then search for link types among al | |
| ted. | | l | |
| Anchor objects are bound together using Link | | the link objects that we have created. Anchor | |
| objects. Each anchor can be the source or destination of zero, one, or more | | objects are bound together using Link objects. Each anchor can be the | |
| links from and to other anchors. | | source or destination of zero, one, or more links from and to other | |
| | | anchors. | |
| | | | |
|
| This module is implemented by HTLink.c, and it is | | Link information can come from many places - two classic examples are the | |
| a part of the W3C Sample Code | | HTML LINK element and the HTTP Link header field. | |
| | | Libwww supports both - the HTML LINK element is handled by the HTML parser | |
| | | and the HTTP Link header field | |
| | | is handled by the MIME parser. | |
| | | | |
| | | The Webbot uses the link class to maintain the | |
| | | information of the Web that it is seeing when traversing the Web as a | |
| | | robot. | |
| | | | |
| | | This module is implemented by HTLink.c, and it is a | |
| | | part of the W3C Sample Code | |
| Library. | | Library. | |
| */ | | */ | |
|
| | | | |
| #ifndef HTLINK_H | | #ifndef HTLINK_H | |
| #define HTLINK_H | | #define HTLINK_H | |
| | | | |
|
| typedef struct _HTLink HTLink; | | typedef struct _HTLink HTLink; | |
| | | | |
| #include "WWWUtil.h" | | #include "WWWUtil.h" | |
| #include "HTMethod.h" | | #include "HTMethod.h" | |
| #include "HTAnchor.h" | | #include "HTAnchor.h" | |
|
| | | | |
| /* | | /* | |
|
| . | | | |
| Creation and Deletion Methods | | .Creation and Deletion Methods. | |
| . | | | |
| | | | |
| These are the methods for crating and deleting new link objects | | These are the methods for crating and deleting new link objects | |
|
| ( | | | |
| Create a new Link Object | | (Create a new Link Object) | |
| ) | | | |
| */ | | */ | |
|
| typedef HTAtom * HTLinkType; | | typedef HTAtom * HTLinkType; | |
| | | | |
| typedef enum _HTLinkResult { | | typedef enum _HTLinkResult { | |
| HT_LINK_INVALID = -1, | | HT_LINK_INVALID = -1, | |
| HT_LINK_NONE = 0, | | HT_LINK_NONE = 0, | |
| HT_LINK_ERROR, | | HT_LINK_ERROR, | |
| HT_LINK_OK | | HT_LINK_OK | |
| } HTLinkResult; | | } HTLinkResult; | |
| | | | |
| struct _HTLink { | | struct _HTLink { | |
|
| HTAnchor * dest; /* The anchor to which this leads | | HTAnchor * dest; /* The anchor to which this lead | |
| */ | | s */ | |
| HTLinkType type; /* Semantics of this link | | HTLinkType type; /* Semantics of this lin | |
| */ | | k */ | |
| HTMethod method; /* Method for this link, e.g. PUT | | HTMethod method; /* Method for this link, e.g. PU | |
| */ | | T */ | |
| HTLinkResult result; /* Result of any attempt to get this link | | HTLinkResult result; /* Result of any attempt to get this lin | |
| */ | | k */ | |
| }; | | }; | |
| | | | |
| HTLink * HTLink_new (void); | | HTLink * HTLink_new (void); | |
|
| | | | |
| /* | | /* | |
|
| ( | | | |
| Delete a Link Object | | (Delete a Link Object) | |
| ) | | | |
| | | | |
| A link can be removed as any other object | | A link can be removed as any other object | |
| */ | | */ | |
| BOOL HTLink_delete (HTLink * link); | | BOOL HTLink_delete (HTLink * link); | |
|
| | | | |
| /* | | /* | |
|
| ( | | | |
| Remove All Link Information from an Anchor | | (Remove All Link Information from an Anchor) | |
| ) | | | |
| | | | |
| This is normally a part of deleting anchor objects. | | This is normally a part of deleting anchor objects. | |
| */ | | */ | |
| extern BOOL HTLink_removeAll (HTAnchor * me); | | extern BOOL HTLink_removeAll (HTAnchor * me); | |
|
| | | /* | |
| | | | |
|
| | | .Predefined Link Types. | |
| | | | |
| | | Just for ease of use, we define a seet of commonly used link types. You can | |
| | | ofcourse use any other link type you want. | |
| | | */ | |
| | | #define HT_LR_PERM_REDIRECT HTAtom_for("PERMANENT_REDIRECTION") | |
| | | #define HT_LR_TEMP_REDIRECT HTAtom_for("TEMPORARY_REDIRECTION") | |
| | | #define HT_LR_SEE_OTHER HTAtom_for("SEE_OTHER") | |
| /* | | /* | |
|
| . | | | |
| Handle Link Between Anchors | | .Handle Link Between Anchors. | |
| . | | | |
| | | | |
| As mentioned, link objects are the ones that bind anchor objects together | | As mentioned, link objects are the ones that bind anchor objects together | |
| in a Web like structure | | in a Web like structure | |
|
| ( | | | |
| Add a Link between two Anchors | | (Add a Link between two Anchors) | |
| ) | | | |
| | | | |
| This method creates a new link between two anchor | | This method creates a new link between two anchor | |
| objects. | | objects. | |
| */ | | */ | |
|
| extern BOOL HTLink_add (HTAnchor * source, | | extern BOOL HTLink_add ( | |
| HTAnchor * destination, | | HTAnchor * source, | |
| HTLinkType type, | | HTAnchor * destination, | |
| HTMethod method); | | HTLinkType type, | |
| | | HTMethod method); | |
| /* | | /* | |
|
| ( | | | |
| Remove All Links Between two Anchors | | (Remove All Links Between two Anchors) | |
| ) | | | |
| | | | |
| Removes link information from one anchor to another. | | Removes link information from one anchor to another. | |
| */ | | */ | |
|
| extern BOOL HTLink_remove (HTAnchor * source, HTAnchor * destination); | | extern BOOL HTLink_remove ( | |
| | | HTAnchor * source, | |
| | | HTAnchor * destination); | |
| /* | | /* | |
|
| ( | | | |
| Find a Link | | (Find a Link) | |
| ) | | | |
| | | | |
| Find the anchor object between a destination and a source ancher. Return | | Find the anchor object between a destination and a source ancher. Return | |
| link object if any, else NULL | | link object if any, else NULL | |
| */ | | */ | |
| extern HTLink * HTLink_find (HTAnchor * source, HTAnchor * destination); | | extern HTLink * HTLink_find (HTAnchor * source, HTAnchor * destination); | |
|
| | | /* | |
| | | | |
| | | (Find a Link with a given link type) | |
| | | | |
|
| | | Returns a link with a given link type or NULL if nothing found | |
| | | */ | |
| | | extern HTLink * HTLink_findType (HTAnchor * me, HTLinkType type); | |
| /* | | /* | |
|
| . | | | |
| Link Information | | .Link Information. | |
| . | | | |
| | | | |
| This is the set of methods for accessing the information carried by a link | | This is the set of methods for accessing the information carried by a link | |
| object | | object | |
|
| ( | | | |
| Link Destination | | (Link Destination) | |
| ) | | | |
| | | | |
| The link destination is the destination anchor pointed to by the link. | | The link destination is the destination anchor pointed to by the link. | |
| */ | | */ | |
| extern BOOL HTLink_setDestination (HTLink * link, HTAnchor * dest); | | extern BOOL HTLink_setDestination (HTLink * link, HTAnchor * dest); | |
| extern HTAnchor * HTLink_destination (HTLink * link); | | extern HTAnchor * HTLink_destination (HTLink * link); | |
|
| | | | |
| /* | | /* | |
|
| ( | | | |
| Link Types and Semantic Links | | (Link Types and Semantic Links) | |
| ) | | | |
| | | | |
| Each link has a sematic representation associated with it. This means that | | Each link has a sematic representation associated with it. This means that | |
| the application can distinguish between pages based on the semantics of the | | the application can distinguish between pages based on the semantics of the | |
| link. This is very similar to the LINK tag in HTML pages which | | link. This is very similar to the LINK tag in HTML pages which | |
| indicates the meaning if this pages to other pages. | | indicates the meaning if this pages to other pages. | |
| */ | | */ | |
| extern BOOL HTLink_setType (HTLink * link, HTLinkType type); | | extern BOOL HTLink_setType (HTLink * link, HTLinkType type); | |
| extern HTLinkType HTLink_type (HTLink * link); | | extern HTLinkType HTLink_type (HTLink * link); | |
|
| | | | |
| /* | | /* | |
|
| ( | | | |
| Link Method | | (Link Method) | |
| ) | | | |
| | | | |
| The link method is the HTTP method we have performed between the two links. | | The link method is the HTTP method we have performed between the two links. | |
|
| For example, it can be a POST operation, or a PUT operation where the opera | | For example, it can be a POST operation, or a PUT operation where the | |
| tion | | operation on the first anchor created a new anchor. | |
| on the first anchor created a new anchor. | | | |
| */ | | */ | |
| extern BOOL HTLink_setMethod (HTLink * link, HTMethod method); | | extern BOOL HTLink_setMethod (HTLink * link, HTMethod method); | |
| extern HTMethod HTLink_method (HTLink * link); | | extern HTMethod HTLink_method (HTLink * link); | |
|
| | | | |
| /* | | /* | |
|
| ( | | | |
| Link Result | | | |
| ) | | | |
| | | | |
|
| When a link has been used for posting an object from a source to a destinat | | (Link Result) | |
| ion | | | |
| link, the result of the operation is stored as part of the link information | | | |
| . | | | |
| This means that we can keep track of which operations we have performed on | | | |
| a link and hence the application can ask the user whether he or she wants | | | |
| to do a re-post, for example. | | | |
| */ | | | |
| | | | |
|
| | | When a link has been used for posting an object from a source to a | |
| | | destination link, the result of the operation is stored as part of the link | |
| | | information. This means that we can keep track of which operations we have | |
| | | performed on a link and hence the application can ask the user whether he o | |
| | | r | |
| | | she wants to do a re-post, for example. | |
| | | */ | |
| extern BOOL HTLink_setResult (HTLink * link, HTLinkResult result); | | extern BOOL HTLink_setResult (HTLink * link, HTLinkResult result); | |
| extern HTLinkResult HTLink_result (HTLink * link); | | extern HTLinkResult HTLink_result (HTLink * link); | |
|
| | | | |
| /* | | /* | |
| */ | | */ | |
|
| | | | |
| #endif /* HTLINK_H */ | | #endif /* HTLINK_H */ | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| @(#) $Id: HTLink.html,v 2.3 1998/05/14 02:10:38 frystyk Exp $ | | @(#) $Id: HTLink.html,v 2.6 1999/03/29 15:51:44 frystyk Exp $ | |
| | | | |
| */ | | */ | |
| | | | |
End of changes. 44 change blocks. |
| 97 lines changed or deleted | | 96 lines changed or added | |
|
| HTMLPDTD.h | | HTMLPDTD.h | |
| | | | |
| skipping to change at line 56 | | skipping to change at line 56 | |
| HTML Element Enumeration | | HTML Element Enumeration | |
| . | | . | |
| | | | |
| These include tables in HTMLPDTD.c and | | These include tables in HTMLPDTD.c and | |
| code in HTML.c. Note that not everything from | | code in HTML.c. Note that not everything from | |
| HTML 4.0 is there! | | HTML 4.0 is there! | |
| */ | | */ | |
| | | | |
| typedef enum _HTMLElement { | | typedef enum _HTMLElement { | |
| HTML_A = 0, | | HTML_A = 0, | |
|
| HTML_ABBREV, | | HTML_ABBR, | |
| HTML_ABSTRACT, | | | |
| HTML_ACRONYM, | | HTML_ACRONYM, | |
|
| HTML_ADDED, | | | |
| HTML_ADDRESS, | | HTML_ADDRESS, | |
|
| | | HTML_APPLET, | |
| HTML_AREA, | | HTML_AREA, | |
|
| HTML_ARG, | | | |
| HTML_B, | | HTML_B, | |
| HTML_BASE, | | HTML_BASE, | |
|
| | | HTML_BASEFONT, | |
| | | HTML_BDO, | |
| HTML_BIG, | | HTML_BIG, | |
| HTML_BLOCKQUOTE, | | HTML_BLOCKQUOTE, | |
| HTML_BODY, | | HTML_BODY, | |
|
| HTML_BOX, | | | |
| HTML_BR, | | HTML_BR, | |
|
| HTML_BYLINE, | | HTML_BUTTON, | |
| HTML_CAPTION, | | HTML_CAPTION, | |
|
| HTML_CHANGED, | | HTML_CENTER, | |
| HTML_CITE, | | HTML_CITE, | |
|
| HTML_CMD, | | | |
| HTML_CODE, | | HTML_CODE, | |
|
| HTML_COMMENT, | | HTML_COL, | |
| | | HTML_COLGROUP, | |
| HTML_DD, | | HTML_DD, | |
|
| | | HTML_DEL, | |
| HTML_DFN, | | HTML_DFN, | |
| HTML_DIR, | | HTML_DIR, | |
| HTML_DIV, | | HTML_DIV, | |
| HTML_DL, | | HTML_DL, | |
| HTML_DT, | | HTML_DT, | |
| HTML_EM, | | HTML_EM, | |
|
| HTML_FIG, | | HTML_FIELDSET, | |
| HTML_FOOTNOTE, | | HTML_FONT, | |
| HTML_FORM, | | HTML_FORM, | |
| HTML_FRAME, | | HTML_FRAME, | |
| HTML_FRAMESET, | | HTML_FRAMESET, | |
| HTML_H1, | | HTML_H1, | |
| HTML_H2, | | HTML_H2, | |
| HTML_H3, | | HTML_H3, | |
| HTML_H4, | | HTML_H4, | |
| HTML_H5, | | HTML_H5, | |
| HTML_H6, | | HTML_H6, | |
|
| HTML_H7, | | | |
| HTML_HEAD, | | HTML_HEAD, | |
| HTML_HR, | | HTML_HR, | |
| HTML_HTML, | | HTML_HTML, | |
|
| HTML_HTMLPLUS, | | | |
| HTML_I, | | HTML_I, | |
|
| HTML_IMAGE, | | HTML_IFRAME, | |
| HTML_IMG, | | HTML_IMG, | |
| HTML_INPUT, | | HTML_INPUT, | |
|
| | | HTML_INS, | |
| HTML_ISINDEX, | | HTML_ISINDEX, | |
| HTML_KBD, | | HTML_KBD, | |
|
| HTML_L, | | HTML_LABEL, | |
| | | HTML_LEGEND, | |
| HTML_LI, | | HTML_LI, | |
| HTML_LINK, | | HTML_LINK, | |
|
| HTML_LISTING, | | | |
| HTML_LIT, | | | |
| HTML_MAP, | | HTML_MAP, | |
|
| HTML_MARGIN, | | | |
| HTML_MATH, | | | |
| HTML_MENU, | | HTML_MENU, | |
| HTML_META, | | HTML_META, | |
|
| HTML_NEXTID, | | HTML_NEXTID, /* !!! */ | |
| HTML_NOFRAMES, | | HTML_NOFRAMES, | |
|
| HTML_NOTE, | | HTML_NOSCRIPT, | |
| HTML_OBJECT, | | HTML_OBJECT, | |
| HTML_OL, | | HTML_OL, | |
|
| | | HTML_OPTGROUP, | |
| HTML_OPTION, | | HTML_OPTION, | |
|
| HTML_OVER, | | | |
| HTML_P, | | HTML_P, | |
|
| HTML_PERSON, | | HTML_PARAM, | |
| HTML_PLAINTEXT, | | | |
| HTML_PRE, | | HTML_PRE, | |
| HTML_Q, | | HTML_Q, | |
|
| HTML_QUOTE, | | | |
| HTML_RENDER, | | | |
| HTML_REMOVED, | | | |
| HTML_S, | | HTML_S, | |
| HTML_SAMP, | | HTML_SAMP, | |
|
| | | HTML_SCRIPT, | |
| HTML_SELECT, | | HTML_SELECT, | |
| HTML_SMALL, | | HTML_SMALL, | |
| HTML_SPAN, | | HTML_SPAN, | |
|
| | | HTML_STRIKE, | |
| HTML_STRONG, | | HTML_STRONG, | |
|
| | | HTML_STYLE, | |
| HTML_SUB, | | HTML_SUB, | |
| HTML_SUP, | | HTML_SUP, | |
|
| HTML_TAB, | | | |
| HTML_TABLE, | | HTML_TABLE, | |
|
| | | HTML_TBODY, | |
| HTML_TD, | | HTML_TD, | |
| HTML_TEXTAREA, | | HTML_TEXTAREA, | |
|
| | | HTML_TFOOT, | |
| HTML_TH, | | HTML_TH, | |
|
| | | HTML_THEAD, | |
| HTML_TITLE, | | HTML_TITLE, | |
| HTML_TR, | | HTML_TR, | |
| HTML_TT, | | HTML_TT, | |
| HTML_U, | | HTML_U, | |
| HTML_UL, | | HTML_UL, | |
| HTML_VAR, | | HTML_VAR, | |
|
| HTML_XMP, | | | |
| HTML_ELEMENTS /* This must be the last entry */ | | HTML_ELEMENTS /* This must be the last entry */ | |
| } HTMLElement; | | } HTMLElement; | |
| | | | |
| /* | | /* | |
| . | | . | |
| Element Attribute Enumerations | | Element Attribute Enumerations | |
| . | | . | |
| | | | |
| Identifier is HTML_<element>_<attribute>. These | | Identifier is HTML_<element>_<attribute>. These | |
| must match the tables in | | must match the tables in | |
| HTMLPDTD.c! | | HTMLPDTD.c! | |
| ( | | ( | |
|
| | | Attributes definition Macros | |
| | | ) | |
| | | */ | |
| | | | |
| | | /* Define an attribute as HTML__ */ | |
| | | #define HTML_ATTR(t,a) HTML_##t##_##a | |
| | | #define HTML_ATTRIBUTES(t) HTML_##t##_ATTRIBUTES | |
| | | | |
| | | /* | |
| | | ( | |
| A | | A | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_A_EFFECT 0 | | enum _HTML_A_Attributes { | |
| #define HTML_A_HREF 1 | | HTML_ATTR(A,ACCESSKEY) = 0, | |
| #define HTML_A_ID 2 | | HTML_ATTR(A,CHARSET), | |
| #define HTML_A_METHODS 3 | | HTML_ATTR(A,CLASS), | |
| #define HTML_A_NAME 4 | | HTML_ATTR(A,COORDS), | |
| #define HTML_A_PRINT 5 | | HTML_ATTR(A,DIR), | |
| #define HTML_A_REL 6 | | HTML_ATTR(A,HREF), | |
| #define HTML_A_REV 7 | | HTML_ATTR(A,HREFLANG), | |
| #define HTML_A_SHAPE 8 | | HTML_ATTR(A,ID), | |
| #define HTML_A_TITLE 9 | | HTML_ATTR(A,NAME), | |
| #define HTML_A_ATTRIBUTES 10 | | HTML_ATTR(A,REL), | |
| | | HTML_ATTR(A,REV), | |
| | | HTML_ATTR(A,SHAPE), | |
| | | HTML_ATTR(A,STYLE), | |
| | | HTML_ATTR(A,TABINDEX), | |
| | | HTML_ATTR(A,TARGET), | |
| | | HTML_ATTR(A,TYPE), | |
| | | HTML_ATTR(A,TITLE), | |
| | | HTML_ATTRIBUTES(A) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | APPLET - Deprecated | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_APPLET_Attributes { | |
| | | HTML_ATTR(APPLET,ALIGN) = 0, | |
| | | HTML_ATTR(APPLET,ALT), | |
| | | HTML_ATTR(APPLET,ARCHIVE), | |
| | | HTML_ATTR(APPLET,CLASS), | |
| | | HTML_ATTR(APPLET,CODE), | |
| | | HTML_ATTR(APPLET,CODEBASE), | |
| | | HTML_ATTR(APPLET,HEIGHT), | |
| | | HTML_ATTR(APPLET,HSPACE), | |
| | | HTML_ATTR(APPLET,ID), | |
| | | HTML_ATTR(APPLET,NAME), | |
| | | HTML_ATTR(APPLET,OBJECT), | |
| | | HTML_ATTR(APPLET,STYLE), | |
| | | HTML_ATTR(APPLET,TITLE), | |
| | | HTML_ATTR(APPLET,VSPACE), | |
| | | HTML_ATTR(APPLET,WIDTH), | |
| | | HTML_ATTRIBUTES(APPLET) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| AREA | | AREA | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_AREA_ALT 0 | | enum _HTML_AREA_Attributes { | |
| #define HTML_AREA_ACCESSKEY 1 | | HTML_ATTR(AREA,ACCESSKEY) = 0, | |
| #define HTML_AREA_COORDS 2 | | HTML_ATTR(AREA,ALT), | |
| #define HTML_AREA_HREF 3 | | HTML_ATTR(AREA,CLASS), | |
| #define HTML_AREA_NOHREF 4 | | HTML_ATTR(AREA,COORDS), | |
| #define HTML_AREA_ONBLUR 5 | | HTML_ATTR(AREA,DIR), | |
| #define HTML_AREA_ONFOCUS 6 | | HTML_ATTR(AREA,HREF), | |
| #define HTML_AREA_SHAPE 7 | | HTML_ATTR(AREA,ID), | |
| #define HTML_AREA_TABINDEX 8 | | HTML_ATTR(AREA,NAME), | |
| #define HTML_AREA_ATTRIBUTES 9 | | HTML_ATTR(AREA,NOHREF), | |
| | | HTML_ATTR(AREA,LANG), | |
| | | HTML_ATTR(AREA,SHAPE), | |
| | | HTML_ATTR(AREA,STYLE), | |
| | | HTML_ATTR(AREA,TABINDEX), | |
| | | HTML_ATTR(AREA,TARGET), | |
| | | HTML_ATTR(AREA,TITLE), | |
| | | HTML_ATTRIBUTES(AREA) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| BASE | | BASE | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_BASE_HREF 0 | | enum _HTML_BASE_Attributes { | |
| #define HTML_BASE_ATTRIBUTES 1 | | HTML_ATTR(BASE,HREF) = 0, | |
| | | HTML_ATTR(BASE,TARGET), | |
| | | HTML_ATTRIBUTES(BASE) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | BDO | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_BDO_Attributes { | |
| | | HTML_ATTR(BDO,CLASS) = 0, | |
| | | HTML_ATTR(BDO,DIR), | |
| | | HTML_ATTR(BDO,ID), | |
| | | HTML_ATTR(BDO,LANG), | |
| | | HTML_ATTR(BDO,STYLE), | |
| | | HTML_ATTR(BDO,TITLE), | |
| | | HTML_ATTRIBUTES(BDO) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | BLOCKQUOTE | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_BQ_Attributes { | |
| | | HTML_ATTR(BQ,CITE) = 0, | |
| | | HTML_ATTR(BQ,CLASS), | |
| | | HTML_ATTR(BQ,DIR), | |
| | | HTML_ATTR(BQ,ID), | |
| | | HTML_ATTR(BQ,LANG), | |
| | | HTML_ATTR(BQ,STYLE), | |
| | | HTML_ATTR(BQ,TITLE), | |
| | | HTML_ATTRIBUTES(BQ) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| BODY | | BODY | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_BODY_BACKGROUND 0 | | enum _HTML_BODY_Attributes { | |
| #define HTML_BODY_ATTRIBUTES 1 | | HTML_ATTR(BODY,ALINK) = 0, | |
| | | HTML_ATTR(BODY,BACKGROUND), | |
| | | HTML_ATTR(BODY,BGCOLOR), | |
| | | HTML_ATTR(BODY,CLASS), | |
| | | HTML_ATTR(BODY,DIR), | |
| | | HTML_ATTR(BODY,ID), | |
| | | HTML_ATTR(BODY,LANG), | |
| | | HTML_ATTR(BODY,LINK), | |
| | | HTML_ATTR(BODY,STYLE), | |
| | | HTML_ATTR(BODY,TEXT), | |
| | | HTML_ATTR(BODY,TITLE), | |
| | | HTML_ATTR(BODY,VLINK), | |
| | | HTML_ATTRIBUTES(BODY) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | BR | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_BR_Attributes { | |
| | | HTML_ATTR(BR,CLASS) = 0, | |
| | | HTML_ATTR(BR,CLEAR), | |
| | | HTML_ATTR(BR,ID), | |
| | | HTML_ATTR(BR,STYLE), | |
| | | HTML_ATTR(BR,TITLE), | |
| | | HTML_ATTRIBUTES(BR) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | BUTTON | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_BUTTON_Attributes { | |
| | | HTML_ATTR(BUTTON,ACCESSKEY) = 0, | |
| | | HTML_ATTR(BUTTON,CLASS), | |
| | | HTML_ATTR(BUTTON,DIR), | |
| | | HTML_ATTR(BUTTON,DISABLED), | |
| | | HTML_ATTR(BUTTON,ID), | |
| | | HTML_ATTR(BUTTON,LANG), | |
| | | HTML_ATTR(BUTTON,NAME), | |
| | | HTML_ATTR(BUTTON,STYLE), | |
| | | HTML_ATTR(BUTTON,TABINDEX), | |
| | | HTML_ATTR(BUTTON,TITLE), | |
| | | HTML_ATTR(BUTTON,TYPE), | |
| | | HTML_ATTR(BUTTON,VALUE), | |
| | | HTML_ATTRIBUTES(BUTTON), | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | COL | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_COL_Attributes { | |
| | | HTML_ATTR(COL,CLASS) = 0, | |
| | | HTML_ATTR(COL,DIR), | |
| | | HTML_ATTR(COL,ID), | |
| | | HTML_ATTR(COL,LANG), | |
| | | HTML_ATTR(COL,SPAN), | |
| | | HTML_ATTR(COL,STYLE), | |
| | | HTML_ATTR(COL,TITLE), | |
| | | HTML_ATTR(COL,WIDTH), | |
| | | HTML_ATTRIBUTES(COL) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | DEL, INS | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_CHANGES_Attributes { | |
| | | HTML_ATTR(CHANGES,CITE) = 0, | |
| | | HTML_ATTR(CHANGES,CLASS), | |
| | | HTML_ATTR(CHANGES,DATETIME), | |
| | | HTML_ATTR(CHANGES,DIR), | |
| | | HTML_ATTR(CHANGES,ID), | |
| | | HTML_ATTR(CHANGES,LANG), | |
| | | HTML_ATTR(CHANGES,STYLE), | |
| | | HTML_ATTR(CHANGES,TITLE), | |
| | | HTML_ATTRIBUTES(CHANGES) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | FONT - Deprecated | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_FONT_Attributes { | |
| | | HTML_ATTR(FONT,CLASS) = 0, | |
| | | HTML_ATTR(FONT,COLOR), | |
| | | HTML_ATTR(FONT,DIR), | |
| | | HTML_ATTR(FONT,FACE), | |
| | | HTML_ATTR(FONT,ID), | |
| | | HTML_ATTR(FONT,LANG), | |
| | | HTML_ATTR(FONT,SIZE), | |
| | | HTML_ATTR(FONT,STYLE), | |
| | | HTML_ATTR(FONT,TITLE), | |
| | | HTML_ATTRIBUTES(FONT) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| FORM | | FORM | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_FORM_ACTION 0 /* WSM bug fix, added these five */ | | enum _HTML_FORM_Attributes { | |
| #define HTML_FORM_ID 1 | | HTML_ATTR(FORM,ACCEPT) = 0, | |
| #define HTML_FORM_INDEX 2 | | HTML_ATTR(FORM,ACCEPT_CHARSET), /* { "ACCEPT-CHARSET" } */ | |
| #define HTML_FORM_LANG 3 | | HTML_ATTR(FORM,ACTION), | |
| #define HTML_FORM_METHOD 4 | | HTML_ATTR(FORM,CLASS), | |
| #define HTML_FORM_ATTRIBUTES 5 | | HTML_ATTR(FORM,DIR), | |
| | | HTML_ATTR(FORM,ENCTYPE), | |
| | | HTML_ATTR(FORM,ID), | |
| | | HTML_ATTR(FORM,LANG), | |
| | | HTML_ATTR(FORM,METHOD), | |
| | | HTML_ATTR(FORM,STYLE), | |
| | | HTML_ATTR(FORM,TARGET), | |
| | | HTML_ATTR(FORM,TITLE), | |
| | | HTML_ATTRIBUTES(FORM) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| FRAME | | FRAME | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_FRAME_SRC 0 | | enum _HTML_FRAME_Attributes { | |
| #define HTML_FRAME_ATTRIBUTES 1 | | HTML_ATTR(FRAME,CLASS) = 0, | |
| | | HTML_ATTR(FRAME,FRAMEBORDER), | |
| | | HTML_ATTR(FRAME,ID), | |
| | | HTML_ATTR(FRAME,NAME), | |
| | | HTML_ATTR(FRAME,MARGINHEIGHT), | |
| | | HTML_ATTR(FRAME,MARGINWIDTH), | |
| | | HTML_ATTR(FRAME,NORESIZE), | |
| | | HTML_ATTR(FRAME,LONGDESC), | |
| | | HTML_ATTR(FRAME,SCROLLING), | |
| | | HTML_ATTR(FRAME,SRC), | |
| | | HTML_ATTR(FRAME,STYLE), | |
| | | HTML_ATTR(FRAME,TARGET), | |
| | | HTML_ATTR(FRAME,TITLE), | |
| | | HTML_ATTRIBUTES(FRAME) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| FRAMESET | | FRAMESET | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_FRAMESET_COLS 0 | | enum _HTML_FRAMESET_Attributes { | |
| #define HTML_FRAMESET_ROWS 1 | | HTML_ATTR(FRAMESET,CLASS) = 0, | |
| #define HTML_FRAMESET_BORDER 2 | | HTML_ATTR(FRAMESET,COLS), | |
| #define HTML_FRAMESET_BORDERCOLOR 3 | | HTML_ATTR(FRAMESET,ID), | |
| #define HTML_FRAMESET_FRAMEBORDER 4 | | HTML_ATTR(FRAMESET,ROWS), | |
| #define HTML_FRAMESET_ONBLUR 5 | | HTML_ATTR(FRAMESET,STYLE), | |
| #define HTML_FRAMESET_ONFOCUS 6 | | HTML_ATTR(FRAMESET,TITLE), | |
| #define HTML_FRAMESET_ONLOAD 7 | | HTML_ATTRIBUTES(FRAMESET) | |
| #define HTML_FRAMESET_ONUNLOAD 8 | | }; | |
| #define HTML_FRAMESET_ATTRIBUTES 9 | | | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| FIG | | Generic attributes | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_FIG_ATTRIBUTES 6 | | enum _HTML_GEN_Attributes { | |
| | | HTML_ATTR(GEN,CLASS) = 0, | |
| | | HTML_ATTR(GEN,DIR), | |
| | | HTML_ATTR(GEN,ID), | |
| | | HTML_ATTR(GEN,LANG), | |
| | | HTML_ATTR(GEN,STYLE), | |
| | | HTML_ATTR(GEN,TITLE), | |
| | | HTML_ATTRIBUTES(GEN) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| GEN | | BLOCK | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_GEN_ATTRIBUTES 3 | | enum _HTML_BLOCK_Attributes { | |
| | | HTML_ATTR(BLOCK,ALIGN) = 0, | |
| | | HTML_ATTR(BLOCK,CLASS), | |
| | | HTML_ATTR(BLOCK,DIR), | |
| | | HTML_ATTR(BLOCK,ID), | |
| | | HTML_ATTR(BLOCK,LANG), | |
| | | HTML_ATTR(BLOCK,STYLE), | |
| | | HTML_ATTR(BLOCK,TITLE), | |
| | | HTML_ATTRIBUTES(BLOCK) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| HTMLPLUS | | HEAD | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_HTMLPLUS_ATTRIBUTES 2 | | enum _HTML_HEAD_Attributes { | |
| | | HTML_ATTR(HEAD,DIR) = 0, | |
| | | HTML_ATTR(HEAD,LANG), | |
| | | HTML_ATTR(HEAD,PROFILE), | |
| | | HTML_ATTRIBUTES(HEAD) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| IMAGE | | HR | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_IMAGE_ATTRIBUTES 5 | | enum _HTML_HR_Attributes { | |
| | | HTML_ATTR(HR,ALIGN) = 0, | |
| | | HTML_ATTR(HR,CLASS), | |
| | | HTML_ATTR(HR,DIR), | |
| | | HTML_ATTR(HR,ID), | |
| | | HTML_ATTR(HR,LANG), | |
| | | HTML_ATTR(HR,NOSHADE), | |
| | | HTML_ATTR(HR,SIZE), | |
| | | HTML_ATTR(HR,STYLE), | |
| | | HTML_ATTR(HR,TITLE), | |
| | | HTML_ATTR(HR,WIDTH), | |
| | | HTML_ATTRIBUTES(HR) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| CHANGED | | HTML | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_CHANGED_ATTRIBUTES 2 | | enum _HTML_HTML_Attributes { | |
| | | HTML_ATTR(HTML,DIR) = 0, | |
| | | HTML_ATTR(HTML,LANG), | |
| | | HTML_ATTR(HTML,VERSION), | |
| | | HTML_ATTRIBUTES(HTML) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| DL | | IFRAME | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_DL_ID 0 | | enum _HTML_IFRAME_Attributes { | |
| #define HTML_DL_COMPACT 1 | | HTML_ATTR(IFRAME,ALIGN) = 0, | |
| #define HTML_DL_INDEX 2 | | HTML_ATTR(IFRAME,CLASS), | |
| #define HTML_DL_ATTRIBUTES 3 | | HTML_ATTR(IFRAME,FRAMEBORDER), | |
| | | HTML_ATTR(IFRAME,HEIGHT), | |
| | | HTML_ATTR(IFRAME,ID), | |
| | | HTML_ATTR(IFRAME,LONGDESC), | |
| | | HTML_ATTR(IFRAME,MARGINHEIGHT), | |
| | | HTML_ATTR(IFRAME,MARGINWIDTH), | |
| | | HTML_ATTR(IFRAME,NAME), | |
| | | HTML_ATTR(IFRAME,SCROLLING), | |
| | | HTML_ATTR(IFRAME,SRC), | |
| | | HTML_ATTR(IFRAME,STYLE), | |
| | | HTML_ATTR(IFRAME,TARGET), | |
| | | HTML_ATTR(IFRAME,TITLE), | |
| | | HTML_ATTR(IFRAME,WIDTH), | |
| | | HTML_ATTRIBUTES(IFRAME) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| IMG | | IMG | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_IMG_ALIGN 0 | | enum _HTML_IMG_Attributes { | |
| #define HTML_IMG_ALT 1 | | HTML_ATTR(IMG,ALIGN) = 0, | |
| #define HTML_IMG_ISMAP 2 /* Obsolete but supported */ | | HTML_ATTR(IMG,ALT), | |
| #define HTML_IMG_LOWSRC 3 | | HTML_ATTR(IMG,BORDER), | |
| #define HTML_IMG_SEETHRU 4 | | HTML_ATTR(IMG,CLASS), | |
| #define HTML_IMG_SRC 5 | | HTML_ATTR(IMG,DIR), | |
| #define HTML_IMG_ATTRIBUTES 6 | | HTML_ATTR(IMG,HEIGHT), | |
| | | HTML_ATTR(IMG,HSPACE), | |
| | | HTML_ATTR(IMG,ID), | |
| | | HTML_ATTR(IMG,ISMAP), | |
| | | HTML_ATTR(IMG,LANG), | |
| | | HTML_ATTR(IMG,LONGDESC), | |
| | | HTML_ATTR(IMG,SRC), | |
| | | HTML_ATTR(IMG,STYLE), | |
| | | HTML_ATTR(IMG,TITLE), | |
| | | HTML_ATTR(IMG,USEMAP), | |
| | | HTML_ATTR(IMG,VSPACE), | |
| | | HTML_ATTR(IMG,WIDTH), | |
| | | HTML_ATTRIBUTES(IMG) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| INPUT | | INPUT | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_INPUT_ALIGN 0 | | enum _HTML_INPUT_Attributes { | |
| #define HTML_INPUT_CHECKED 1 | | HTML_ATTR(INPUT,ACCEPT) = 0, | |
| #define HTML_INPUT_DISABLED 2 | | HTML_ATTR(INPUT,ACCESSKEY), | |
| #define HTML_INPUT_ERROR 3 | | HTML_ATTR(INPUT,ALIGN), | |
| #define HTML_INPUT_MAX 4 | | HTML_ATTR(INPUT,ALT), | |
| #define HTML_INPUT_MIN 5 | | HTML_ATTR(INPUT,CHECKED), | |
| #define HTML_INPUT_NAME 6 | | HTML_ATTR(INPUT,CLASS), | |
| #define HTML_INPUT_SIZE 7 | | HTML_ATTR(INPUT,DIR), | |
| #define HTML_INPUT_SRC 8 | | HTML_ATTR(INPUT,DISABLED), | |
| #define HTML_INPUT_TYPE 9 | | HTML_ATTR(INPUT,ID), | |
| #define HTML_INPUT_VALUE 10 | | HTML_ATTR(INPUT,LANG), | |
| #define HTML_INPUT_ATTRIBUTES 11 | | HTML_ATTR(INPUT,MAXLENGTH), | |
| | | HTML_ATTR(INPUT,NAME), | |
| | | HTML_ATTR(INPUT,READONLY), | |
| | | HTML_ATTR(INPUT,SIZE), | |
| | | HTML_ATTR(INPUT,SRC), | |
| | | HTML_ATTR(INPUT,STYLE), | |
| | | HTML_ATTR(INPUT,TABINDEX), | |
| | | HTML_ATTR(INPUT,TITLE), | |
| | | HTML_ATTR(INPUT,TYPE), | |
| | | HTML_ATTR(INPUT,USEMAP), | |
| | | HTML_ATTR(INPUT,VALUE), | |
| | | HTML_ATTRIBUTES(INPUT) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| L | | | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_L_ATTRIBUTES 4 | | enum _HTML_ISINDEX_Attributes { | |
| | | HTML_ATTR(ISINDEX,CLASS) = 0, | |
| | | HTML_ATTR(ISINDEX,DIR), | |
| | | HTML_ATTR(ISINDEX,ID), | |
| | | HTML_ATTR(ISINDEX,LANG), | |
| | | HTML_ATTR(ISINDEX,PROMPT), | |
| | | HTML_ATTR(ISINDEX,STYLE), | |
| | | HTML_ATTR(ISINDEX,TITLE), | |
| | | HTML_ATTRIBUTES(ISINDEX) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| LI | | | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_LI_ATTRIBUTES 4 | | enum _HTML_LABEL_Attributes { | |
| | | HTML_ATTR(LABEL,ACCESSKEY) = 0, | |
| | | HTML_ATTR(LABEL,CLASS), | |
| | | HTML_ATTR(LABEL,DIR), | |
| | | HTML_ATTR(LABEL,FOR), | |
| | | HTML_ATTR(LABEL,ID), | |
| | | HTML_ATTR(LABEL,LANG), | |
| | | HTML_ATTR(LABEL,STYLE), | |
| | | HTML_ATTR(LABEL,TITLE), | |
| | | HTML_ATTRIBUTES(LABEL) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| LIST | | | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_LIST_ATTRIBUTES 4 | | enum _HTML_LEGEND_Attributes { | |
| | | HTML_ATTR(LEGEND,ACCESSKEY) = 0, | |
| | | HTML_ATTR(LEGEND,ALIGN), | |
| | | HTML_ATTR(LEGEND,CLASS), | |
| | | HTML_ATTR(LEGEND,DIR), | |
| | | HTML_ATTR(LEGEND,ID), | |
| | | HTML_ATTR(LEGEND,LANG), | |
| | | HTML_ATTR(LEGEND,STYLE), | |
| | | HTML_ATTR(LEGEND,TITLE), | |
| | | HTML_ATTRIBUTES(LEGEND) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| LINK | | LI | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_LINK_CHARSET 0 | | enum _HTML_LI_Attributes { | |
| #define HTML_LINK_HREF 1 | | HTML_ATTR(LI,CLASS) = 0, | |
| #define HTML_LINK_HREFLANG 2 | | HTML_ATTR(LI,COMPACT), | |
| #define HTML_LINK_MEDIA 3 | | HTML_ATTR(LI,DIR), | |
| #define HTML_LINK_REL 4 | | HTML_ATTR(LI,ID), | |
| #define HTML_LINK_REV 5 | | HTML_ATTR(LI,LANG), | |
| #define HTML_LINK_TYPE 6 | | HTML_ATTR(LI,STYLE), | |
| #define HTML_LINK_ATTRIBUTES 7 | | HTML_ATTR(LI,TITLE), | |
| | | HTML_ATTR(LI,TYPE), | |
| | | HTML_ATTR(LI,VALUE), | |
| | | HTML_ATTRIBUTES(LI) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| ID | | LINK | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_ID_ATTRIBUTE 1 | | enum _HTML_LINK_Attributes { | |
| | | HTML_ATTR(LINK,CHARSET) = 0, | |
| | | HTML_ATTR(LINK,CLASS), | |
| | | HTML_ATTR(LINK,DIR), | |
| | | HTML_ATTR(LINK,HREF), | |
| | | HTML_ATTR(LINK,HREFLANG), | |
| | | HTML_ATTR(LINK,ID), | |
| | | HTML_ATTR(LINK,LANG), | |
| | | HTML_ATTR(LINK,MEDIA), | |
| | | HTML_ATTR(LINK,REL), | |
| | | HTML_ATTR(LINK,REV), | |
| | | HTML_ATTR(LINK,STYLE), | |
| | | HTML_ATTR(LINK,TARGET), | |
| | | HTML_ATTR(LINK,TITLE), | |
| | | HTML_ATTR(LINK,TYPE), | |
| | | HTML_ATTRIBUTES(LINK) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| MAP | | MAP | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_MAP_NAME 0 | | enum _HTML_MAP_Attributes { | |
| #define HTML_MAP_ATTRIBUTES 1 | | HTML_ATTR(MAP,CLASS) = 0, | |
| | | HTML_ATTR(MAP,DIR), | |
| | | HTML_ATTR(MAP,ID), | |
| | | HTML_ATTR(MAP,LANG), | |
| | | HTML_ATTR(MAP,NAME), | |
| | | HTML_ATTR(MAP,STYLE), | |
| | | HTML_ATTR(MAP,TITLE), | |
| | | HTML_ATTRIBUTES(MAP) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| META | | META | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_META_CONTENT 0 | | enum _HTML_META_Attributes { | |
| #define HTML_META_HTTP_EQUIV 1 | | HTML_ATTR(META,CONTENT) = 0, | |
| #define HTML_META_NAME 2 | | HTML_ATTR(META,DIR), | |
| #define HTML_META_SCHEME 3 | | HTML_ATTR(META,HTTP_EQUIV), /* { "HTTP-EQUIV" ) */ | |
| #define HTML_META_ATTRIBUTES 4 | | HTML_ATTR(META,LANG), | |
| | | HTML_ATTR(META,NAME), | |
| | | HTML_ATTR(META,SCHEME), | |
| | | HTML_ATTRIBUTES(META) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| NEXTID | | NEXTID | |
| ) | | ) | |
| */ | | */ | |
| | | | |
| #define HTML_NEXTID_ATTRIBUTES 1 | | #define HTML_NEXTID_ATTRIBUTES 1 | |
| #define HTML_NEXTID_N 0 | | #define HTML_NEXTID_N 0 | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| NOTE | | OBJECT | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_NOTE_ATTRIBUTES 4 | | enum _HTML_OBJECT_Attributes { | |
| | | HTML_ATTR(OBJECT,ALIGN) = 0, | |
| | | HTML_ATTR(OBJECT,ARCHIVE), | |
| | | HTML_ATTR(OBJECT,BORDER), | |
| | | HTML_ATTR(OBJECT,CLASS), | |
| | | HTML_ATTR(OBJECT,CLASSID), | |
| | | HTML_ATTR(OBJECT,CODEBASE), | |
| | | HTML_ATTR(OBJECT,CODETYPE), | |
| | | HTML_ATTR(OBJECT,DATA), | |
| | | HTML_ATTR(OBJECT,DECLARE), | |
| | | HTML_ATTR(OBJECT,DIR), | |
| | | HTML_ATTR(OBJECT,HEIGHT), | |
| | | HTML_ATTR(OBJECT,HSPACE), | |
| | | HTML_ATTR(OBJECT,ID), | |
| | | HTML_ATTR(OBJECT,LANG), | |
| | | HTML_ATTR(OBJECT,NAME), | |
| | | HTML_ATTR(OBJECT,STANDBY), | |
| | | HTML_ATTR(OBJECT,STYLE), | |
| | | HTML_ATTR(OBJECT,TABINDEX), | |
| | | HTML_ATTR(OBJECT,TITLE), | |
| | | HTML_ATTR(OBJECT,TYPE), | |
| | | HTML_ATTR(OBJECT,USEMAP), | |
| | | HTML_ATTR(OBJECT,VSPACE), | |
| | | HTML_ATTR(OBJECT,WIDTH), | |
| | | HTML_ATTRIBUTES(OBJECT) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| OBJECT | | OL | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_OBJECT_ARCHIVE 0 | | enum _HTML_OL_Attributes { | |
| #define HTML_OBJECT_CLASSID 1 | | HTML_ATTR(OL,CLASS) = 0, | |
| #define HTML_OBJECT_CODEBASE 2 | | HTML_ATTR(OL,COMPACT), | |
| #define HTML_OBJECT_CODETYPE 3 | | HTML_ATTR(OL,DIR), | |
| #define HTML_OBJECT_DATA 4 | | HTML_ATTR(OL,ID), | |
| #define HTML_OBJECT_DECLARE 5 | | HTML_ATTR(OL,LANG), | |
| #define HTML_OBJECT_HIGHT 6 | | HTML_ATTR(OL,START), | |
| #define HTML_OBJECT_NAME 7 | | HTML_ATTR(OL,STYLE), | |
| #define HTML_OBJECT_STANDBY 8 | | HTML_ATTR(OL,TITLE), | |
| #define HTML_OBJECT_TABINDEX 9 | | HTML_ATTR(OL,TYPE), | |
| #define HTML_OBJECT_TYPE 10 | | HTML_ATTRIBUTES(OL) | |
| #define HTML_OBJECT_USEMAP 11 | | }; | |
| #define HTML_OBJECT_WIDTH 12 | | | |
| #define HTML_OBJECT_ATTRIBUTES 13 | | /* | |
| | | ( | |
| | | OPTGROUP | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_OPTGROUP_Attributes { | |
| | | HTML_ATTR(OPTGROUP,CLASS) = 0, | |
| | | HTML_ATTR(OPTGROUP,DISABLED), | |
| | | HTML_ATTR(OPTGROUP,DIR), | |
| | | HTML_ATTR(OPTGROUP,ID), | |
| | | HTML_ATTR(OPTGROUP,LABEL), | |
| | | HTML_ATTR(OPTGROUP,LANG), | |
| | | HTML_ATTR(OPTGROUP,STYLE), | |
| | | HTML_ATTR(OPTGROUP,TITLE), | |
| | | HTML_ATTRIBUTES(OPTGROUP) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| OPTION | | OPTION | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_OPTION_DISABLED 0 /* WSM bug fix, added these 4 */ | | enum _HTML_OPTION_Attributes { | |
| #define HTML_OPTION_LANG 1 | | HTML_ATTR(OPTION,CLASS) = 0, | |
| #define HTML_OPTION_SELECTED 2 | | HTML_ATTR(OPTION,DISABLED), | |
| #define HTML_OPTION_ATTRIBUTES 3 | | HTML_ATTR(OPTION,DIR), | |
| | | HTML_ATTR(OPTION,ID), | |
| | | HTML_ATTR(OPTION,LABEL), | |
| | | HTML_ATTR(OPTION,LANG), | |
| | | HTML_ATTR(OPTION,SELECTED), | |
| | | HTML_ATTR(OPTION,STYLE), | |
| | | HTML_ATTR(OPTION,TITLE), | |
| | | HTML_ATTR(OPTION,VALUE), | |
| | | HTML_ATTRIBUTES(OPTION) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| RENDER | | PARAM | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_RENDER_ATTRIBUTES 2 | | enum _HTML_PARAM_Attributes { | |
| | | HTML_ATTR(PARAM,ID) = 0, | |
| | | HTML_ATTR(PARAM,NAME), | |
| | | HTML_ATTR(PARAM,TYPE), | |
| | | HTML_ATTR(PARAM,VALUE), | |
| | | HTML_ATTR(PARAM,VALUETYPE), | |
| | | HTML_ATTRIBUTES(PARAM) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | PRE | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_PRE_Attributes { | |
| | | HTML_ATTR(PRE,CLASS) = 0, | |
| | | HTML_ATTR(PRE,DIR), | |
| | | HTML_ATTR(PRE,ID), | |
| | | HTML_ATTR(PRE,LANG), | |
| | | HTML_ATTR(PRE,STYLE), | |
| | | HTML_ATTR(PRE,TITLE), | |
| | | HTML_ATTR(PRE,WIDTH), | |
| | | HTML_ATTRIBUTES(PRE) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | SCRIPT | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_SCRIPT_Attributes { | |
| | | HTML_ATTR(SCRIPT,CHARSET) = 0, | |
| | | HTML_ATTR(SCRIPT,DEFER), | |
| | | HTML_ATTR(SCRIPT,LANGUAGE), | |
| | | HTML_ATTR(SCRIPT,SRC), | |
| | | HTML_ATTR(SCRIPT,TYPE), | |
| | | HTML_ATTRIBUTES(SCRIPT) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| SELECT | | SELECT | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_SELECT_ERROR 0 /* WSM bug fix, added these 5 */ | | enum _HTML_SELECT_Attributes { | |
| #define HTML_SELECT_LANG 1 | | HTML_ATTR(SELECT,CLASS) = 0, | |
| #define HTML_SELECT_MULTIPLE 2 | | HTML_ATTR(SELECT,DIR), | |
| #define HTML_SELECT_NAME 3 | | HTML_ATTR(SELECT,DISABLED), | |
| #define HTML_SELECT_SIZE 4 | | HTML_ATTR(SELECT,ID), | |
| #define HTML_SELECT_ATTRIBUTES 5 | | HTML_ATTR(SELECT,LANG), | |
| | | HTML_ATTR(SELECT,MULTIPLE), | |
| | | HTML_ATTR(SELECT,NAME), | |
| | | HTML_ATTR(SELECT,SIZE), | |
| | | HTML_ATTR(SELECT,STYLE), | |
| | | HTML_ATTR(SELECT,TABINDEX), | |
| | | HTML_ATTR(SELECT,TITLE), | |
| | | HTML_ATTRIBUTES(SELECT) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| TAB | | STYLE | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_TAB_ATTRIBUTES 2 | | enum _HTML_STYLE_Attributes { | |
| | | HTML_ATTR(STYLE,DIR) = 0, | |
| | | HTML_ATTR(STYLE,LANG), | |
| | | HTML_ATTR(STYLE,MEDIA), | |
| | | HTML_ATTR(STYLE,TITLE), | |
| | | HTML_ATTR(STYLE,TYPE), | |
| | | HTML_ATTRIBUTES(STYLE) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| TABLE | | TABLE | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_TABLE_ATTRIBUTES 4 | | enum _HTML_TABLE_Attributes { | |
| | | HTML_ATTR(TABLE,ALIGN) = 0, | |
| | | HTML_ATTR(TABLE,BGCOLOR), | |
| | | HTML_ATTR(TABLE,BORDER), | |
| | | HTML_ATTR(TABLE,CELLPADDING), | |
| | | HTML_ATTR(TABLE,CELLSPACING), | |
| | | HTML_ATTR(TABLE,CLASS), | |
| | | HTML_ATTR(TABLE,DIR), | |
| | | HTML_ATTR(TABLE,FRAME), | |
| | | HTML_ATTR(TABLE,ID), | |
| | | HTML_ATTR(TABLE,LANG), | |
| | | HTML_ATTR(TABLE,RULES), | |
| | | HTML_ATTR(TABLE,SUMMARY), | |
| | | HTML_ATTR(TABLE,STYLE), | |
| | | HTML_ATTR(TABLE,TITLE), | |
| | | HTML_ATTR(TABLE,WIDTH), | |
| | | HTML_ATTRIBUTES(TABLE) | |
| | | }; | |
| | | | |
| | | /* | |
| | | ( | |
| | | TABLE Elements | |
| | | ) | |
| | | */ | |
| | | | |
| | | enum _HTML_TELE_Attributes { | |
| | | HTML_ATTR(TELE,ALIGN) = 0, | |
| | | HTML_ATTR(TELE,CHAR), | |
| | | HTML_ATTR(TELE,CHAROFF), | |
| | | HTML_ATTR(TELE,CLASS), | |
| | | HTML_ATTR(TELE,DIR), | |
| | | HTML_ATTR(TELE,ID), | |
| | | HTML_ATTR(TELE,LANG), | |
| | | HTML_ATTR(TELE,STYLE), | |
| | | HTML_ATTR(TELE,TITLE), | |
| | | HTML_ATTR(TELE,VALIGN), | |
| | | HTML_ATTRIBUTES(TELE) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| TD | | TD | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_TD_ATTRIBUTES 4 | | enum _HTML_TD_Attributes { | |
| | | HTML_ATTR(TD,ABBR) = 0, | |
| | | HTML_ATTR(TD,ALIGN), | |
| | | HTML_ATTR(TD,AXIS), | |
| | | HTML_ATTR(TD,BGCOLOR), | |
| | | HTML_ATTR(TD,CHAR), | |
| | | HTML_ATTR(TD,CHAROFF), | |
| | | HTML_ATTR(TD,CLASS), | |
| | | HTML_ATTR(TD,COLSPAN), | |
| | | HTML_ATTR(TD,DIR), | |
| | | HTML_ATTR(TD,ID), | |
| | | HTML_ATTR(TD,HEADERS), | |
| | | HTML_ATTR(TD,HEIGHT), | |
| | | HTML_ATTR(TD,LANG), | |
| | | HTML_ATTR(TD,NOWRAP), | |
| | | HTML_ATTR(TD,ROWSPAN), | |
| | | HTML_ATTR(TD,SCOPE), | |
| | | HTML_ATTR(TD,STYLE), | |
| | | HTML_ATTR(TD,TITLE), | |
| | | HTML_ATTR(TD,VALIGN), | |
| | | HTML_ATTR(TD,WIDTH), | |
| | | HTML_ATTRIBUTES(TD) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| TEXTAREA | | TEXTAREA | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_TEXTAREA_COLS 0 | | enum _HTML_TEXTAREA_Attributes { | |
| #define HTML_TEXTAREA_DISABLED 1 | | HTML_ATTR(TEXTAREA,CLASS) = 0, | |
| #define HTML_TEXTAREA_ERROR 2 | | HTML_ATTR(TEXTAREA,COLS), | |
| #define HTML_TEXTAREA_LANG 3 | | HTML_ATTR(TEXTAREA,DIR), | |
| #define HTML_TEXTAREA_NAME 4 | | HTML_ATTR(TEXTAREA,DISABLED), | |
| #define HTML_TEXTAREA_ROWS 5 | | HTML_ATTR(TEXTAREA,ID), | |
| #define HTML_TEXTAREA_ATTRIBUTES 6 | | HTML_ATTR(TEXTAREA,LANG), | |
| | | HTML_ATTR(TEXTAREA,NAME), | |
| | | HTML_ATTR(TEXTAREA,READONLY), | |
| | | HTML_ATTR(TEXTAREA,ROWS), | |
| | | HTML_ATTR(TEXTAREA,STYLE), | |
| | | HTML_ATTR(TEXTAREA,TABINDEX), | |
| | | HTML_ATTR(TEXTAREA,TITLE), | |
| | | HTML_ATTRIBUTES(TEXTAREA) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| TH | | TITLE | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_TH_ATTRIBUTES 4 | | enum _HTML_TITLE_Attributes { | |
| | | HTML_ATTR(TITLE,DIR) = 0, | |
| | | HTML_ATTR(TITLE,LANG), | |
| | | HTML_ATTRIBUTES(TITLE) | |
| | | }; | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| UL | | UL | |
| ) | | ) | |
| */ | | */ | |
| | | | |
|
| #define HTML_UL_ATTRIBUTES 6 | | enum _HTML_UL_Attributes { | |
| | | HTML_ATTR(UL,CLASS) = 0, | |
| | | HTML_ATTR(UL,COMPACT), | |
| | | HTML_ATTR(UL,DIR), | |
| | | HTML_ATTR(UL,ID), | |
| | | HTML_ATTR(UL,LANG), | |
| | | HTML_ATTR(UL,STYLE), | |
| | | HTML_ATTR(UL,TITLE), | |
| | | HTML_ATTR(UL,TYPE), | |
| | | HTML_ATTRIBUTES(UL) | |
| | | }; | |
| | | | |
| /* | | /* | |
| . | | . | |
| The C Representation of the SGML DTD | | The C Representation of the SGML DTD | |
| . | | . | |
| */ | | */ | |
| | | | |
| extern SGML_dtd * HTML_dtd (void); | | extern SGML_dtd * HTML_dtd (void); | |
| extern BOOL HTML_setDtd (const SGML_dtd * dtd); | | extern BOOL HTML_setDtd (const SGML_dtd * dtd); | |
| | | | |
| | | | |
| skipping to change at line 586 | | skipping to change at line 1118 | |
| | | | |
| extern void HTNextID (HTStructured * targetStream, const char * s); | | extern void HTNextID (HTStructured * targetStream, const char * s); | |
| | | | |
| /* | | /* | |
| */ | | */ | |
| | | | |
| #endif /* HTMLDTD_H */ | | #endif /* HTMLDTD_H */ | |
| | | | |
| /* | | /* | |
| | | | |
|
| @(#) $Id: HTMLPDTD.html,v 2.29 1999/01/22 14:52:01 frystyk Exp $ | | @(#) $Id: HTMLPDTD.html,v 2.30 1999/04/02 16:10:36 frystyk Exp $ | |
| | | | |
| */ | | */ | |
| | | | |
End of changes. 84 change blocks. |
| 174 lines changed or deleted | | 706 lines changed or added | |
|
| HTReq.h | | HTReq.h | |
| | | | |
| skipping to change at line 79 | | skipping to change at line 79 | |
| #include "HTAssoc.h" | | #include "HTAssoc.h" | |
| #include "HTFormat.h" | | #include "HTFormat.h" | |
| #include "HTStream.h" | | #include "HTStream.h" | |
| #include "HTError.h" | | #include "HTError.h" | |
| #include "HTNet.h" | | #include "HTNet.h" | |
| #include "HTUser.h" | | #include "HTUser.h" | |
| #include "HTResponse.h" | | #include "HTResponse.h" | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Issuing a Request | | | |
| . | | | |
| | | | |
| These are the "basic request methods" provided directly by the Request | | | |
| class. This is a very low level API as the caller must have set up the requ | | | |
| est | | | |
| object before passing it to libwww. There are two versions: one for issuing | | | |
| client requests and one for issuing server requests. You will probably most | | | |
| often use the client version but libwww can in fact also deal with incoming | | | |
| connections. You can find many higher level issuing functions in the | | | |
| HTAccess module. If you like, you can of course | | | |
| use this directly! | | | |
| */ | | | |
| | | | |
| extern BOOL HTLoad (HTRequest * request, BOOL recursive); | | | |
| extern BOOL HTServe(HTRequest * request, BOOL recursive); | | | |
| | | | |
| /* | | | |
| . | | | |
| Killing a Request | | | |
| . | | | |
| | | | |
| This function kills this particular request, see HTNet | | | |
| module for a function that kills them all. If you know that you are | | | |
| pipelining requests (typically the case for GUI browsers, robots etc.) then | | | |
| it is often not enough to just kill a single request as the whole pipeline | | | |
| gets affected. Therefore, in that case you MUST call the | | | |
| HTHost_killPipe function instead, | | | |
| */ | | | |
| | | | |
| extern BOOL HTRequest_kill(HTRequest * request); | | | |
| | | | |
| /* | | | |
| | | | |
| Note that you can get to the HTHost object via the HTNet | | | |
| object which you can get by calling | | | |
| HTRequest_net(...). | | | |
| . | | | |
| Creation and Deletion Methods | | Creation and Deletion Methods | |
| . | | . | |
| | | | |
| The request object is intended to live as long as the request is still acti
ve, | | The request object is intended to live as long as the request is still acti
ve, | |
| but can be deleted as soon as it has terminated, for example in one of the | | but can be deleted as soon as it has terminated, for example in one of the | |
| request termination callback functions as described in the | | request termination callback functions as described in the | |
| Net Manager. Only the anchor object stays around | | Net Manager. Only the anchor object stays around | |
| after the request itself is terminated. | | after the request itself is terminated. | |
| ( | | ( | |
| Create new Object | | Create new Object | |
| | | | |
| skipping to change at line 170 | | skipping to change at line 133 | |
| Create a duplicate for Internal use | | Create a duplicate for Internal use | |
| | | | |
| Creates a new HTRequest object as a duplicate of the src request. The diffe
rence | | Creates a new HTRequest object as a duplicate of the src request. The diffe
rence | |
| to the HTRequest_dup function is that we don't copy the error_stack and oth
er | | to the HTRequest_dup function is that we don't copy the error_stack and oth
er | |
| information that the application keeps in its copy of the request object. | | information that the application keeps in its copy of the request object. | |
| Otherwise it will be freed multiple times. Returns YES if OK, else NO | | Otherwise it will be freed multiple times. Returns YES if OK, else NO | |
| */ | | */ | |
| | | | |
| extern HTRequest * HTRequest_dupInternal (HTRequest * src); | | extern HTRequest * HTRequest_dupInternal (HTRequest * src); | |
| | | | |
|
| | | extern BOOL HTRequest_setInternal (HTRequest * request, BOOL mode); | |
| | | extern BOOL HTRequest_internal (HTRequest * request); | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| Delete Object | | Delete Object | |
| ) | | ) | |
| | | | |
| This function deletes the object and cleans up the memory. | | This function deletes the object and cleans up the memory. | |
| */ | | */ | |
| | | | |
| extern void HTRequest_delete (HTRequest * request); | | extern void HTRequest_delete (HTRequest * request); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Date and Time Stamp when Request was Issued | | Issuing a Request | |
| . | | . | |
| | | | |
|
| The start time when the request was issued may be of value to the cache | | These are the "basic request methods" provided directly by the Request | |
| validation mechanism as described by the HTTP/1.1 specification. The value | | class. This is a very low level API as the caller must have set up the requ | |
| is automatically set when creating the request headers and sending off the | | est | |
| request. The time is a local time. | | object before passing it to libwww. There are two versions: one for issuing | |
| | | client requests and one for issuing server requests. You will probably most | |
| | | often use the client version but libwww can in fact also deal with incoming | |
| | | connections. You can find many higher level issuing functions in the | |
| | | HTAccess module. If you like, you can of course | |
| | | use this directly! | |
| */ | | */ | |
| | | | |
|
| extern time_t HTRequest_date (HTRequest * request); | | extern BOOL HTLoad (HTRequest * request, BOOL recursive); | |
| extern BOOL HTRequest_setDate (HTRequest * request, time_t date); | | extern BOOL HTServe(HTRequest * request, BOOL recursive); | |
| | | | |
| | | /* | |
| | | . | |
| | | Killing a Request | |
| | | . | |
| | | | |
| | | This function kills this particular request, see HTNet | |
| | | module for a function that kills them all. If you know that you are | |
| | | pipelining requests (typically the case for GUI browsers, robots etc.) then | |
| | | it is often not enough to just kill a single request as the whole pipeline | |
| | | gets affected. Therefore, in that case you MUST call the | |
| | | HTHost_killPipe function instead, | |
| | | */ | |
| | | | |
| | | extern BOOL HTRequest_kill(HTRequest * request); | |
| | | | |
| | | /* | |
| | | | |
| | | Note that you can get to the HTHost object via the HTNet | |
| | | object which you can get by calling | |
| | | HTRequest_net(...). | |
| | | . | |
| | | Relations to Other Libwww Objects | |
| | | . | |
| | | | |
| | | The Request object is linked to a set of other libwww objects - here's how | |
| | | to get to these objects... | |
| | | ( | |
| | | Binding to an Anchor Object | |
| | | ) | |
| | | | |
| | | Every request object has an anchor associated | |
| | | with it. The anchor normally lives until the application terminates but a | |
| | | request object only lives as long as the request is being serviced. If the | |
| | | anchor that we have requested is infact a child anchor then we always load | |
| | | the parent anchor and then after the load jump to the location. A child anc | |
| | | hor | |
| | | is a an anchor which points to a subpart of the document (has a "#" in the | |
| | | URL). | |
| | | */ | |
| | | | |
| | | extern void HTRequest_setAnchor (HTRequest *request, HTAnchor *anchor); | |
| | | extern HTParentAnchor * HTRequest_anchor (HTRequest *request); | |
| | | | |
| | | extern HTChildAnchor * HTRequest_childAnchor (HTRequest * request); | |
| | | | |
| | | /* | |
| | | ( | |
| | | Binding to a User Profile | |
| | | ) | |
| | | | |
| | | Each request is associated with a User profile | |
| | | which contains information about the local host name, email address of the | |
| | | user, news server etc. A request object is created with a default "generic | |
| | | user" but can be assigned a specific user at any time. | |
| | | */ | |
| | | | |
| | | extern BOOL HTRequest_setUserProfile (HTRequest * request, HTUserProfile * | |
| | | up); | |
| | | extern HTUserProfile * HTRequest_userProfile (HTRequest * request); | |
| | | | |
| | | /* | |
| | | ( | |
| | | Binding to a Net Object | |
| | | ) | |
| | | | |
| | | If a request is actually going on the net then the Net | |
| | | Manager is contacted to handle the request. The Net manager creates a | |
| | | HTNEt object and links it to the Request object. You can get to the HTNet | |
| | | object using the following functions. | |
| | | */ | |
| | | | |
| | | extern HTNet * HTRequest_net (HTRequest * request); | |
| | | extern BOOL HTRequest_setNet (HTRequest * request, HTNet * net); | |
| | | | |
| | | /* | |
| | | | |
| | | Note that you can go from the HTNet object to the | |
| | | HTHost object by calling HTNet_host(...). | |
| | | ( | |
| | | Binding to a Response Object | |
| | | ) | |
| | | | |
| | | If a request is actually going on the net and we are getting a response bac | |
| | | k | |
| | | then we also create a HTResponse object and | |
| | | bind it to the request object. Once we know what to do with the response, | |
| | | we may transfer the information to the anchor object. | |
| | | */ | |
| | | | |
| | | extern HTResponse * HTRequest_response (HTRequest * request); | |
| | | extern BOOL HTRequest_setResponse (HTRequest * request, HTResponse * respon | |
| | | se); | |
| | | | |
| /* | | /* | |
| . | | . | |
| Set the Method for the Request | | Set the Method for the Request | |
| . | | . | |
| | | | |
| The Method is the operation to be executed on the requested object. The def
ault | | The Method is the operation to be executed on the requested object. The def
ault | |
| set if the set of operations defined by the HTTP protocol, that is "GET", | | set if the set of operations defined by the HTTP protocol, that is "GET", | |
| "HEAD", "PUT", "POST", "LINK", "UNLINK", and "DELETE" but many of these can | | "HEAD", "PUT", "POST", "LINK", "UNLINK", and "DELETE" but many of these can | |
| be used in other protocols as well. The important thing is to think of the | | be used in other protocols as well. The important thing is to think of the | |
| | | | |
| skipping to change at line 221 | | skipping to change at line 280 | |
| | | | |
| extern void HTRequest_setMethod (HTRequest *request, HTMethod method); | | extern void HTRequest_setMethod (HTRequest *request, HTMethod method); | |
| extern HTMethod HTRequest_method (HTRequest *request); | | extern HTMethod HTRequest_method (HTRequest *request); | |
| | | | |
| /* | | /* | |
| . | | . | |
| Priority Management | | Priority Management | |
| . | | . | |
| | | | |
| The request can be assigned an initial priority which then gets inherited | | The request can be assigned an initial priority which then gets inherited | |
|
| by all HTNet objects and other requests objects created as a result of this | | by all HTNet objects and other requests objects | |
| one. You can also assign a separate priority to an indicidual HTNet object | | created as a result of this one. You can also assign a separate priority | |
| by using the methods in the Net manager. | | to an indicidual HTNet object by using the methods in the | |
| | | Net manager. | |
| */ | | */ | |
| | | | |
| extern HTPriority HTRequest_priority (HTRequest * request); | | extern HTPriority HTRequest_priority (HTRequest * request); | |
| extern BOOL HTRequest_setPriority (HTRequest * request, HTPriority priority
); | | extern BOOL HTRequest_setPriority (HTRequest * request, HTPriority priority
); | |
| | | | |
| /* | | /* | |
| . | | . | |
| Pipelining Managament | | Pipelining Managament | |
| . | | . | |
| | | | |
| | | | |
| skipping to change at line 246 | | skipping to change at line 306 | |
| sent over the network. This is done by buffering outgoing requests until | | sent over the network. This is done by buffering outgoing requests until | |
| either a minimum amount of data has been collected or a timeout causes a | | either a minimum amount of data has been collected or a timeout causes a | |
| flush to happen. The application can override the output buffering by expli
cit | | flush to happen. The application can override the output buffering by expli
cit | |
| request a request object to be flushed. | | request a request object to be flushed. | |
| */ | | */ | |
| | | | |
| extern BOOL HTRequest_setFlush (HTRequest * me, BOOL mode); | | extern BOOL HTRequest_setFlush (HTRequest * me, BOOL mode); | |
| extern BOOL HTRequest_flush (HTRequest * me); | | extern BOOL HTRequest_flush (HTRequest * me); | |
| | | | |
| /* | | /* | |
|
| . | | ( | |
| Binding to a User Profile | | Force the Pipeline to be Flushed Immediately | |
| . | | ) | |
| | | | |
| Each request is associated with a User profile | | | |
| which contains information about the local host name, email address of the | | | |
| user, news server etc. A request object is created with a default "generic | | | |
| user" but can be assigned a specific user at any time. | | | |
| */ | | | |
| | | | |
| extern BOOL HTRequest_setUserProfile (HTRequest * request, HTUserProfile * | | | |
| up); | | | |
| extern HTUserProfile * HTRequest_userProfile (HTRequest * request); | | | |
| | | | |
| /* | | | |
| . | | | |
| Binding to a Net Object | | | |
| . | | | |
| | | | |
| If a request is actually going on the net then the Net | | | |
| Manager is contacted to handle the request. The Net manager creates a | | | |
| HTNEt object and links it to the Request object. You can get to the HTNet | | | |
| object using the following functions. | | | |
| */ | | | |
| | | | |
| extern HTNet * HTRequest_net (HTRequest * request); | | | |
| extern BOOL HTRequest_setNet (HTRequest * request, HTNet * net); | | | |
| | | | |
| /* | | | |
| | | | |
| Note that you can go from the HTNet object to the | | | |
| HTHost object by calling HTNet_host(...). | | | |
| . | | | |
| Binding to a Response Object | | | |
| . | | | |
| | | | |
|
| If a request is actually going on the net and we are getting a response bac | | Forcing a fluch immediatly is slightly different as this can be done in | |
| k | | "retrospect". That is, if suddenly the application decides on performing | |
| then we also create a HTResponse object and bind it to the request object. | | a flush after the request was initiated then it can use this function to | |
| Once we know what to do with the response, we may transfer the information | | flush at a later time. | |
| to the anchor object. | | | |
| */ | | */ | |
| | | | |
|
| extern HTResponse * HTRequest_response (HTRequest * request); | | extern int HTRequest_forceFlush (HTRequest * request); | |
| extern BOOL HTRequest_setResponse (HTRequest * request, HTResponse * respon | | | |
| se); | | | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Error Object | | Dealing with Request Error Messages | |
| . | | . | |
| | | | |
| Errors are like almost anything kept in lists and a error list can be assoc
iated | | Errors are like almost anything kept in lists and a error list can be assoc
iated | |
| with a request using the following functions. In order to make life easier, | | with a request using the following functions. In order to make life easier, | |
| there are also some easy mapping functions to the | | there are also some easy mapping functions to the | |
| HTError object, so that you can add an error directly | | HTError object, so that you can add an error directly | |
| to a request object. | | to a request object. | |
| */ | | */ | |
| | | | |
| extern HTList * HTRequest_error (HTRequest * request); | | extern HTList * HTRequest_error (HTRequest * request); | |
| | | | |
| skipping to change at line 403 | | skipping to change at line 431 | |
| server applications, but some client applications might also want to use | | server applications, but some client applications might also want to use | |
| content negotiation when accessing the local file system. This method enabl
es | | content negotiation when accessing the local file system. This method enabl
es | |
| or disables content negotiation - the default value is ON. | | or disables content negotiation - the default value is ON. | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setNegotiation (HTRequest *request, BOOL mode); | | extern void HTRequest_setNegotiation (HTRequest *request, BOOL mode); | |
| extern BOOL HTRequest_negotiation (HTRequest *request); | | extern BOOL HTRequest_negotiation (HTRequest *request); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Request Preconditions | | Request Preconditions (HTTP If-* Headers) | |
| . | | . | |
| | | | |
| Should this request use preconditions when doing a PUT or a | | Should this request use preconditions when doing a PUT or a | |
| POST? These are the "if-*" header fields that can be used | | POST? These are the "if-*" header fields that can be used | |
| to avoid version conflicts etc. The default is not to use any preconsitions | | to avoid version conflicts etc. The default is not to use any preconsitions | |
| (HT_NO_MATCH). The _THIS versions use etags and/or time | | (HT_NO_MATCH). The _THIS versions use etags and/or time | |
| stamps and the _ANY versions use the "*" header field value | | stamps and the _ANY versions use the "*" header field value | |
| of the if-match and if-non-match header fields. | | of the if-match and if-non-match header fields. | |
| */ | | */ | |
| typedef enum _HTPreconditions { | | typedef enum _HTPreconditions { | |
| | | | |
| skipping to change at line 426 | | skipping to change at line 454 | |
| HT_MATCH_ANY, | | HT_MATCH_ANY, | |
| HT_DONT_MATCH_THIS, | | HT_DONT_MATCH_THIS, | |
| HT_DONT_MATCH_ANY | | HT_DONT_MATCH_ANY | |
| } HTPreconditions; | | } HTPreconditions; | |
| | | | |
| extern void HTRequest_setPreconditions (HTRequest * me, HTPreconditions mod
e); | | extern void HTRequest_setPreconditions (HTRequest * me, HTPreconditions mod
e); | |
| extern HTPreconditions HTRequest_preconditions (HTRequest * me); | | extern HTPreconditions HTRequest_preconditions (HTRequest * me); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Handling Metainformation (RFC822 Headers) | | Local MIME header Parsers | |
| . | | . | |
| | | | |
|
| The Library supports a large set of headers that can be sent along with a | | MIMEParsers get their own type which is optimized for static and regex pars | |
| request (or a response for that matter). All headers can be either disabled | | er | |
| or enabled using bit flags that are defined in the following. | | strings. | |
| | | */ | |
| | | | |
| | | typedef struct _HTMIMEParseSet HTMIMEParseSet; | |
| | | extern void HTRequest_setMIMEParseSet (HTRequest *request, | |
| | | HTMIMEParseSet * parseSet, BOOL local | |
| | | ); | |
| | | extern HTMIMEParseSet * HTRequest_MIMEParseSet (HTRequest *request, | |
| | | BOOL * pLocal); | |
| | | | |
| | | /* | |
| | | . | |
| | | Which Default Protocol Header Fields To Use? | |
| | | . | |
| | | | |
| | | Libwww supports a large set of headers that can be sent along with a reques | |
| | | t | |
| | | (or a response for that matter). All headers can be either disabled or enab | |
| | | led | |
| | | using bit flags that are defined in the following. See also the | |
| | | section on how to extend the default set of supported header | |
| | | fields. | |
| ( | | ( | |
| General HTTP Header Mask | | General HTTP Header Mask | |
| ) | | ) | |
| | | | |
| There are a few header fields which have general applicability for both req
uest | | There are a few header fields which have general applicability for both req
uest | |
| and response mesages, but which do not apply to the communication parties | | and response mesages, but which do not apply to the communication parties | |
| or theentity being transferred. This mask enables and disables these header
s. | | or theentity being transferred. This mask enables and disables these header
s. | |
| If the bit is not turned on they are not sent. | | If the bit is not turned on they are not sent. | |
| */ | | */ | |
| | | | |
| typedef enum _HTGnHd { | | typedef enum _HTGnHd { | |
| HT_G_CC = 0x1, | | HT_G_CC = 0x1, | |
| HT_G_CONNECTION = 0x2, | | HT_G_CONNECTION = 0x2, | |
| HT_G_DATE = 0x4, | | HT_G_DATE = 0x4, | |
| HT_G_PRAGMA_NO_CACHE= 0x8, | | HT_G_PRAGMA_NO_CACHE= 0x8, | |
| HT_G_FORWARDED = 0x10, | | HT_G_FORWARDED = 0x10, | |
| HT_G_MESSAGE_ID = 0x20, | | HT_G_MESSAGE_ID = 0x20, | |
| HT_G_MIME = 0x40, | | HT_G_MIME = 0x40, | |
| HT_G_TRAILER = 0x80, | | HT_G_TRAILER = 0x80, | |
|
| HT_G_TRANSFER = 0x100 | | HT_G_TRANSFER = 0x100, | |
| | | HT_G_EXTRA_HEADERS = 0x200 | |
| } HTGnHd; | | } HTGnHd; | |
| | | | |
| #define DEFAULT_GENERAL_HEADERS \ | | #define DEFAULT_GENERAL_HEADERS \ | |
|
| HT_G_CONNECTION + HT_G_CC + HT_G_TRANSFER + HT_G_TRAILER | | HT_G_CONNECTION + HT_G_CC + HT_G_TRANSFER + HT_G_TRAILER + \ | |
| | | HT_G_EXTRA_HEADERS | |
| | | | |
| extern void HTRequest_setGnHd (HTRequest *request, HTGnHd gnhd); | | extern void HTRequest_setGnHd (HTRequest *request, HTGnHd gnhd); | |
| extern void HTRequest_addGnHd (HTRequest *request, HTGnHd gnhd); | | extern void HTRequest_addGnHd (HTRequest *request, HTGnHd gnhd); | |
| extern HTGnHd HTRequest_gnHd (HTRequest *request); | | extern HTGnHd HTRequest_gnHd (HTRequest *request); | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| Request Headers | | Request Headers | |
| ) | | ) | |
| | | | |
| | | | |
| skipping to change at line 566 | | skipping to change at line 613 | |
| HT_E_DERIVED_FROM = 0x400, | | HT_E_DERIVED_FROM = 0x400, | |
| HT_E_ETAG = 0x800, | | HT_E_ETAG = 0x800, | |
| HT_E_EXPIRES = 0x1000, | | HT_E_EXPIRES = 0x1000, | |
| HT_E_LAST_MODIFIED = 0x2000, | | HT_E_LAST_MODIFIED = 0x2000, | |
| HT_E_LINK = 0x4000, | | HT_E_LINK = 0x4000, | |
| HT_E_TITLE = 0x8000, | | HT_E_TITLE = 0x8000, | |
| HT_E_URI = 0x10000, | | HT_E_URI = 0x10000, | |
| HT_E_VERSION = 0x20000 | | HT_E_VERSION = 0x20000 | |
| } HTEnHd; | | } HTEnHd; | |
| | | | |
|
| #define DEFAULT_ENTITY_HEADERS 0xFFFF /* all
*/ | | #define DEFAULT_ENTITY_HEADERS 0xFFFFFFFF /* all
*/ | |
| | | | |
| extern void HTRequest_setEnHd (HTRequest *request, HTEnHd enhd); | | extern void HTRequest_setEnHd (HTRequest *request, HTEnHd enhd); | |
| extern void HTRequest_addEnHd (HTRequest *request, HTEnHd enhd); | | extern void HTRequest_addEnHd (HTRequest *request, HTEnHd enhd); | |
| extern HTEnHd HTRequest_enHd (HTRequest *request); | | extern HTEnHd HTRequest_enHd (HTRequest *request); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Local MIME header Parsers | | Extending The Default Set Of Header Fields | |
| . | | . | |
| | | | |
|
| MIMEParsers get their own type which is optimized for static and regex pars | | See also how to set up default header fields. There | |
| er | | are three ways to extend the set of headers that are sent in a request: | |
| strings. | | | |
| | | o | |
| | | A simple association list | |
| | | o | |
| | | A stream oriented approach where the stream (called | |
| | | a generator) has direct access to the outgoing stream. That it, it can | |
| | | add any header it likes. | |
| | | o | |
| | | HTTP extension mechanism which | |
| | | is a much better way for handling extensions. | |
| | | | |
| | | ( | |
| | | 1) Simple Association List | |
| | | ) | |
| | | | |
| | | Add the (name, value) and it will be converted into MIME header format as | |
| | | name: value. Do NOT add CRLF line termination - this is done by | |
| | | the HTTP header generator stream | |
| */ | | */ | |
| | | | |
|
| typedef struct _HTMIMEParseSet HTMIMEParseSet; | | extern BOOL HTRequest_addExtraHeader (HTRequest * request, | |
| extern void HTRequest_setMIMEParseSet (HTRequest *request, | | char * token, char * value); | |
| HTMIMEParseSet * parseSet, BOOL local | | extern HTAssocList * HTRequest_extraHeader (HTRequest * request); | |
| ); | | extern BOOL HTRequest_deleteExtraHeaderAll (HTRequest * request); | |
| extern HTMIMEParseSet * HTRequest_MIMEParseSet (HTRequest *request, | | | |
| BOOL * pLocal); | | /* | |
| | | ( | |
| | | 2) Stream Oriented Header Generators | |
| | | ) | |
| | | | |
| | | Extra header information can be send along with a request using | |
| | | header generators. The text is sent as is so | |
| | | it must be preformatted with CRLF line terminators. You can also | |
| | | register MIME header parsers using the HTHeader | |
| | | module. | |
| | | */ | |
| | | | |
| | | extern void HTRequest_setGenerator (HTRequest *request, HTList *gens, | |
| | | BOOL override); | |
| | | extern HTList * HTRequest_generator (HTRequest *request, BOOL *override); | |
| | | | |
| | | /* | |
| | | ( | |
| | | 3) HTTP Extension Framework | |
| | | ) | |
| | | | |
| | | These association lists contain the information that we are to send as HTTP | |
| | | Extension Framework. This is not done yet but you can find some hints in | |
| | | the PEP module | |
| | | */ | |
| | | | |
| | | /* TBD */ | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Accept Headers | | User And Application Preferences Using Accept Headers | |
| . | | . | |
| | | | |
| The Accept family of headers is an important part of HTTP handling the form
at | | The Accept family of headers is an important part of HTTP handling the form
at | |
| negotiation. The Library supports both a global set of accept headers that | | negotiation. The Library supports both a global set of accept headers that | |
| are used in all HTTP requests and a local set of accept headers | | are used in all HTTP requests and a local set of accept headers | |
| that are used in specific requests only. The global ones are defined in the | | that are used in specific requests only. The global ones are defined in the | |
| Format Manager. | | Format Manager. | |
| | | | |
| Each request can have its local set of accept headers that either are added | | Each request can have its local set of accept headers that either are added | |
| to the global set or replaces the global set of accept headers. Non of the | | to the global set or replaces the global set of accept headers. Non of the | |
| | | | |
| skipping to change at line 709 | | skipping to change at line 801 | |
| directives that are to be sent as part of the Cache-Control | | directives that are to be sent as part of the Cache-Control | |
| header. | | header. | |
| */ | | */ | |
| | | | |
| extern BOOL HTRequest_addCacheControl (HTRequest * request, | | extern BOOL HTRequest_addCacheControl (HTRequest * request, | |
| char * token, char *value); | | char * token, char *value); | |
| extern BOOL HTRequest_deleteCacheControlAll (HTRequest * request); | | extern BOOL HTRequest_deleteCacheControlAll (HTRequest * request); | |
| extern HTAssocList * HTRequest_cacheControl (HTRequest * request); | | extern HTAssocList * HTRequest_cacheControl (HTRequest * request); | |
| | | | |
| /* | | /* | |
|
| ( | | . | |
| | | Date and Time Stamp when Request was Issued | |
| | | . | |
| | | | |
| | | The start time when the request was issued may be of value to the cache | |
| | | validation mechanism as described by the HTTP/1.1 specification. The value | |
| | | is automatically set when creating the request headers and sending off the | |
| | | request. The time is a local time. | |
| | | */ | |
| | | | |
| | | extern time_t HTRequest_date (HTRequest * request); | |
| | | extern BOOL HTRequest_setDate (HTRequest * request, time_t date); | |
| | | | |
| | | /* | |
| | | . | |
| HTTP Expect Directives | | HTTP Expect Directives | |
|
| ) | | . | |
| | | | |
| The Expect request-header field is used to indicate that particular server | | The Expect request-header field is used to indicate that particular server | |
| behaviors are required by the client. A server that does not understand or | | behaviors are required by the client. A server that does not understand or | |
| is unable to comply with any of the expectation values in the Expect field | | is unable to comply with any of the expectation values in the Expect field | |
| of a request MUST respond with appropriate error status. | | of a request MUST respond with appropriate error status. | |
| */ | | */ | |
| | | | |
| extern BOOL HTRequest_addExpect (HTRequest * me, | | extern BOOL HTRequest_addExpect (HTRequest * me, | |
| char * token, char * value); | | char * token, char * value); | |
| extern BOOL HTRequest_deleteExpect (HTRequest * me); | | extern BOOL HTRequest_deleteExpect (HTRequest * me); | |
| extern HTAssocList * HTRequest_expect (HTRequest * me); | | extern HTAssocList * HTRequest_expect (HTRequest * me); | |
| | | | |
| /* | | /* | |
|
| ( | | . | |
| Partial Requests and Range Retrievals | | Partial Requests and Range Retrievals | |
|
| ) | | . | |
| | | | |
| Libwww can issue range requests in case we have already obtained a part of | | Libwww can issue range requests in case we have already obtained a part of | |
| the entity body. Since all HTTP entities are represented in HTTP messages | | the entity body. Since all HTTP entities are represented in HTTP messages | |
| as sequences of bytes, the concept of a byte range is meaningful for any | | as sequences of bytes, the concept of a byte range is meaningful for any | |
| HTTP entity. (However, not all clients and servers need to support byte-ran
ge | | HTTP entity. (However, not all clients and servers need to support byte-ran
ge | |
| operations.) Byte range specifications in HTTP apply to the sequence of byt
es | | operations.) Byte range specifications in HTTP apply to the sequence of byt
es | |
| in the entity-body (not necessarily the same as the message-body). A byte | | in the entity-body (not necessarily the same as the message-body). A byte | |
| range operation may specify a single range of bytes, or a set of ranges wit
hin | | range operation may specify a single range of bytes, or a set of ranges wit
hin | |
| a single entity. | | a single entity. | |
| */ | | */ | |
| | | | |
| skipping to change at line 792 | | skipping to change at line 898 | |
| | | | |
| The realm is normally set and used by the authentication filters. | | The realm is normally set and used by the authentication filters. | |
| */ | | */ | |
| | | | |
| extern BOOL HTRequest_setRealm (HTRequest * request, char * realm); | | extern BOOL HTRequest_setRealm (HTRequest * request, char * realm); | |
| extern const char * HTRequest_realm (HTRequest * request); | | extern const char * HTRequest_realm (HTRequest * request); | |
| extern BOOL HTRequest_deleteRealm (HTRequest * me); | | extern BOOL HTRequest_deleteRealm (HTRequest * me); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| HTTP Extensions (PEP) | | | |
| . | | | |
| | | | |
| HTTP can be extended in several ways but traditionally it has been by using | | | |
| new headers. Here we present a new idea which provides a framework for desc | | | |
| ribing | | | |
| extensions and their scope. This is only an idea an may be modified later! | | | |
| The implementation of the extensions can be found in the | | | |
| PEP module | | | |
| ( | | | |
| Protocol | | | |
| ) | | | |
| | | | |
| This association list is a list of the extension directives that are to be | | | |
| sent as part of the request. | | | |
| */ | | | |
| | | | |
| extern BOOL HTRequest_addProtocol (HTRequest * request, | | | |
| char * token, char * value); | | | |
| extern BOOL HTRequest_deleteProtocolAll (HTRequest * request); | | | |
| extern HTAssocList * HTRequest_Protocol (HTRequest * request); | | | |
| | | | |
| /* | | | |
| ( | | | |
| Protocol Info | | | |
| ) | | | |
| | | | |
| This association list is a list of the extension directives that are to be | | | |
| sent as part of the request. | | | |
| */ | | | |
| | | | |
| extern BOOL HTRequest_addProtocolInfo (HTRequest * request, | | | |
| char * token, char * value); | | | |
| extern BOOL HTRequest_deleteProtocolInfoAll (HTRequest * request); | | | |
| extern HTAssocList * HTRequest_ProtocolInfo (HTRequest * request); | | | |
| | | | |
| /* | | | |
| ( | | | |
| Protocol Request | | | |
| ) | | | |
| | | | |
| This association list is a list of the extension directives that are to be | | | |
| sent as part of the request. | | | |
| */ | | | |
| | | | |
| extern BOOL HTRequest_addProtocolRequest (HTRequest * request, | | | |
| char * token, char * value); | | | |
| extern BOOL HTRequest_deleteProtocolRequestAll (HTRequest * request); | | | |
| extern HTAssocList * HTRequest_ProtocolRequest (HTRequest * request); | | | |
| | | | |
| /* | | | |
| . | | | |
| HTTP Referer Field | | HTTP Referer Field | |
| . | | . | |
| | | | |
| If this parameter is set then a `Referer: <parent address> can be generated | | If this parameter is set then a `Referer: <parent address> can be generated | |
| in the request to the server, see | | in the request to the server, see | |
| Referer field in a HTTP Request | | Referer field in a HTTP Request | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setParent (HTRequest *request, HTParentAnchor *parent
); | | extern void HTRequest_setParent (HTRequest *request, HTParentAnchor *parent
); | |
| extern HTParentAnchor * HTRequest_parent (HTRequest *request); | | extern HTParentAnchor * HTRequest_parent (HTRequest *request); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Extra Headers | | Local BEFORE and AFTER Filters | |
| . | | | |
| | | | |
| Extra header information can be send along with a request using this variab | | | |
| le. | | | |
| The text is sent as is so it must be preformatted with | | | |
| <CRLF> line terminators. This will get changed at some | | | |
| point so that you can register a header together with a handler in the MIME | | | |
| parser. | | | |
| */ | | | |
| | | | |
| extern void HTRequest_setGenerator (HTRequest *request, HTList *gens, | | | |
| BOOL override); | | | |
| extern HTList * HTRequest_generator (HTRequest *request, BOOL *override); | | | |
| | | | |
| /* | | | |
| . | | | |
| BEFORE and AFTER Filters | | | |
| . | | . | |
| | | | |
| The request object may have it's own before and after | | The request object may have it's own before and after | |
| filters. These may override or suplement the | | filters. These may override or suplement the | |
| global set in HTNet. The request object itself handles | | global set in HTNet. The request object itself handles | |
| the list element, that is this should not be freed bu the caller. | | the list element, that is this should not be freed bu the caller. | |
| ( | | ( | |
| BEFORE Filters | | BEFORE Filters | |
| ) | | ) | |
| | | | |
| | | | |
| skipping to change at line 950 | | skipping to change at line 989 | |
| You can delete a local AFTER filter explicitly by passing the filter itself | | You can delete a local AFTER filter explicitly by passing the filter itself | |
| or you can delete all filters which are registered for a certain status cod
e. | | or you can delete all filters which are registered for a certain status cod
e. | |
| */ | | */ | |
| | | | |
| extern BOOL HTRequest_deleteAfter (HTRequest * request, HTNetAfter * filter
); | | extern BOOL HTRequest_deleteAfter (HTRequest * request, HTNetAfter * filter
); | |
| extern BOOL HTRequest_deleteAfterStatus (HTRequest * request, int status); | | extern BOOL HTRequest_deleteAfterStatus (HTRequest * request, int status); | |
| extern BOOL HTRequest_deleteAfterAll (HTRequest * request); | | extern BOOL HTRequest_deleteAfterAll (HTRequest * request); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Sending data to the Network | | Sending data from App to Network | |
| . | | . | |
| | | | |
| Multiple Request objects can be connected in order to create a | | Multiple Request objects can be connected in order to create a | |
| PostWeb for sending data | | PostWeb for sending data | |
| from one location (source) to another (destination). Request objects are | | from one location (source) to another (destination). Request objects are | |
| bound together by connecting the output stream of the source with the input | | bound together by connecting the output stream of the source with the input | |
| stream of the destination requst. The connection can be done directly so | | stream of the destination requst. The connection can be done directly so | |
| that the output from the source is exactly what is sent to the destination | | that the output from the source is exactly what is sent to the destination | |
| or there can be a conversion between the two streams so that we can do | | or there can be a conversion between the two streams so that we can do | |
| conversions on the fly while copying data. This is in fact the way we use | | conversions on the fly while copying data. This is in fact the way we use | |
| | | | |
| skipping to change at line 1009 | | skipping to change at line 1048 | |
| The input stream is to be used to put data to the network. Normally | | The input stream is to be used to put data to the network. Normally | |
| each protocol sets the input stream in order to generate the protocol heade
rs | | each protocol sets the input stream in order to generate the protocol heade
rs | |
| while making a request. | | while making a request. | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setInputStream (HTRequest * request, HTStream * input
); | | extern void HTRequest_setInputStream (HTRequest * request, HTStream * input
); | |
| extern HTStream *HTRequest_inputStream (HTRequest * request); | | extern HTStream *HTRequest_inputStream (HTRequest * request); | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| Is This Request part of a Post Web? | | Is This Request part of a Post Web? (Deprecated) | |
| ) | | ) | |
| | | | |
| Check to see if this request object is part of a Post Web. | | Check to see if this request object is part of a Post Web. | |
| */ | | */ | |
| | | | |
| extern BOOL HTRequest_isPostWeb (HTRequest * request); | | extern BOOL HTRequest_isPostWeb (HTRequest * request); | |
| | | | |
| /* | | /* | |
| ( | | ( | |
| Source of a Request | | Source of a Request | |
| | | | |
| skipping to change at line 1047 | | skipping to change at line 1086 | |
| The output stream is to be used to put data down to as they come in | | The output stream is to be used to put data down to as they come in | |
| from the network and back to the application. The default value is | | from the network and back to the application. The default value is | |
| NULL which means that the stream goes to the user (display). | | NULL which means that the stream goes to the user (display). | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setOutputStream (HTRequest *request, HTStream *output
); | | extern void HTRequest_setOutputStream (HTRequest *request, HTStream *output
); | |
| extern HTStream *HTRequest_outputStream (HTRequest *request); | | extern HTStream *HTRequest_outputStream (HTRequest *request); | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| Has Output Stream been Connected to Channel? | | Default Output Stream Format | |
| ) | | ) | |
| | | | |
|
| Has output stream been connected to the channel? If not then we must free | | The desired format of the output stream. This is used in the | |
| it explicitly when deleting the request object | | stream stack builder to determine which stream | |
| */ | | to plug in to deal with the data. If NULL, then | |
| extern void HTRequest_setOutputConnected (HTRequest * request, BOOL mode); | | | |
| extern BOOL HTRequest_outputConnected (HTRequest * request); | | | |
| | | | |
| /* | | | |
| | | | |
| The desired format of the output stream. This can be used to get unconverte | | | |
| d | | | |
| data etc. from the library. If NULL, then | | | |
| WWW_PRESENT is default value. | | WWW_PRESENT is default value. | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setOutputFormat (HTRequest *request, HTFormat format)
; | | extern void HTRequest_setOutputFormat (HTRequest *request, HTFormat format)
; | |
| extern HTFormat HTRequest_outputFormat (HTRequest *request); | | extern HTFormat HTRequest_outputFormat (HTRequest *request); | |
| | | | |
| /* | | /* | |
| ( | | ( | |
|
| Debug Stream | | Has Output Stream been Connected to Channel? (Deprecated) | |
| | | ) | |
| | | | |
| | | Has output stream been connected to the channel? If not then we must free | |
| | | it explicitly when deleting the request object | |
| | | */ | |
| | | extern void HTRequest_setOutputConnected (HTRequest * request, BOOL mode); | |
| | | extern BOOL HTRequest_outputConnected (HTRequest * request); | |
| | | | |
| | | /* | |
| | | ( | |
| | | Default Debug Stream | |
| ) | | ) | |
| | | | |
| All object bodies sent from the server with status codes different from | | All object bodies sent from the server with status codes different from | |
| 200 OK will be put down this stream. This can be used for | | 200 OK will be put down this stream. This can be used for | |
| redirecting body information in status codes different from "200 OK" to for | | redirecting body information in status codes different from "200 OK" to for | |
| example a debug window. If the value is NULL (default) then the stream is | | example a debug window. If the value is NULL (default) then the stream is | |
| not set up. | | not set up. | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setDebugStream (HTRequest *request, HTStream *debug); | | extern void HTRequest_setDebugStream (HTRequest *request, HTStream *debug); | |
| extern HTStream *HTRequest_debugStream (HTRequest *request); | | extern HTStream *HTRequest_debugStream (HTRequest *request); | |
| | | | |
| /* | | /* | |
|
| | | ( | |
| | | Default Debug Stream Format | |
| | | ) | |
| | | | |
| The desired format of the error stream. This can be used to get unconverted | | The desired format of the error stream. This can be used to get unconverted | |
| data etc. from the library. The default value if WWW_HTML as | | data etc. from the library. The default value if WWW_HTML as | |
| a character based only has one WWW_PRESENT. | | a character based only has one WWW_PRESENT. | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setDebugFormat (HTRequest *request, HTFormat format); | | extern void HTRequest_setDebugFormat (HTRequest *request, HTFormat format); | |
| extern HTFormat HTRequest_debugFormat (HTRequest *request); | | extern HTFormat HTRequest_debugFormat (HTRequest *request); | |
| | | | |
| /* | | /* | |
| | | | |
| skipping to change at line 1119 | | skipping to change at line 1165 | |
| The callback function can be passed an arbitrary pointer (the void part) | | The callback function can be passed an arbitrary pointer (the void part) | |
| which can describe the context of the current request structure. If such | | which can describe the context of the current request structure. If such | |
| context information is required then it can be set using the following meth
ods: | | context information is required then it can be set using the following meth
ods: | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setContext (HTRequest *request, void *context); | | extern void HTRequest_setContext (HTRequest *request, void *context); | |
| extern void *HTRequest_context (HTRequest *request); | | extern void *HTRequest_context (HTRequest *request); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Binding to an Anchor Object | | | |
| . | | | |
| | | | |
| Every request object has an anchor associated | | | |
| with it. The anchor normally lives until the application terminates but a | | | |
| request object only lives as long as the request is being serviced. If the | | | |
| anchor that we have requested is infact a child anchor then we always load | | | |
| the parent anchor and then after the load jump to the location. A child anc | | | |
| hor | | | |
| is a an anchor which points to a subpart of the document (has a "#" in the | | | |
| URL). | | | |
| */ | | | |
| extern void HTRequest_setAnchor (HTRequest *request, HTAnchor *anchor); | | | |
| extern HTParentAnchor * HTRequest_anchor (HTRequest *request); | | | |
| | | | |
| extern HTChildAnchor * HTRequest_childAnchor (HTRequest * request); | | | |
| | | | |
| /* | | | |
| . | | | |
| Should we Issue a full HTTP Request-URI? | | Should we Issue a full HTTP Request-URI? | |
| . | | . | |
| | | | |
| In early versions of HTTP, the request sent to the remote server varies whe
ther | | In early versions of HTTP, the request sent to the remote server varies whe
ther | |
| we use a proxy or go directly to the origin server. The default value is | | we use a proxy or go directly to the origin server. The default value is | |
| OFF but we use a full request if we are talking to a proxy server. | | OFF but we use a full request if we are talking to a proxy server. | |
| */ | | */ | |
| | | | |
| extern void HTRequest_setFullURI (HTRequest *request, BOOL mode); | | extern void HTRequest_setFullURI (HTRequest *request, BOOL mode); | |
| extern BOOL HTRequest_fullURI (HTRequest *request); | | extern BOOL HTRequest_fullURI (HTRequest *request); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Proxy URL | | Handling Proxies | |
| . | | . | |
| | | | |
| In case we are using a proxy for this requst then we can register it togeth
er | | In case we are using a proxy for this requst then we can register it togeth
er | |
| with the request object. That way we can find the proxy and look for | | with the request object. That way we can find the proxy and look for | |
| authentication information, for example in the | | authentication information, for example in the | |
| Authentication filter. The string is freed by | | Authentication filter. The string is freed by | |
|
| the Request object on deletion. | | the Request object on deletion. This is normally handled automatically by | |
| | | the proxy and gateway module | |
| */ | | */ | |
| | | | |
| extern BOOL HTRequest_setProxy (HTRequest * request, const char * proxy)
; | | extern BOOL HTRequest_setProxy (HTRequest * request, const char * proxy)
; | |
| extern char * HTRequest_proxy (HTRequest * request); | | extern char * HTRequest_proxy (HTRequest * request); | |
| extern BOOL HTRequest_deleteProxy (HTRequest * request); | | extern BOOL HTRequest_deleteProxy (HTRequest * request); | |
| | | | |
| /* | | /* | |
| . | | . | |
|
| Enity Bytes Read or Written in a Request | | Bytes Read or Written in a Request | |
| . | | . | |
| | | | |
| This function returns the bytes read in the current request. For a deeper | | This function returns the bytes read in the current request. For a deeper | |
| description of what the current request is, please read the user's guide. | | description of what the current request is, please read the user's guide. | |
| This function can be used in for example the HTAlert | | This function can be used in for example the HTAlert | |
| module to give the number of bytes read or written in a progress message. | | module to give the number of bytes read or written in a progress message. | |
| */ | | */ | |
| | | | |
| extern long HTRequest_bodyRead (HTRequest * request); | | extern long HTRequest_bodyRead (HTRequest * request); | |
| extern long HTRequest_bodyWritten (HTRequest * request); | | extern long HTRequest_bodyWritten (HTRequest * request); | |
| | | | |
| skipping to change at line 1188 | | skipping to change at line 1217 | |
| /* | | /* | |
| | | | |
| You can also get the total number of bytes read or written including the | | You can also get the total number of bytes read or written including the | |
| headers | | headers | |
| */ | | */ | |
| | | | |
| extern long HTRequest_bytesRead (HTRequest * request); | | extern long HTRequest_bytesRead (HTRequest * request); | |
| extern long HTRequest_bytesWritten (HTRequest * request); | | extern long HTRequest_bytesWritten (HTRequest * request); | |
| | | | |
| /* | | /* | |
|
| . | | | |
| Internal Request Objects | | | |
| . | | | |
| | | | |
| The library may under certain circumstances create its own Request objects. | | | |
| These are all handled internal and does not show up on the application side | | | |
| at all. | | | |
| */ | | | |
| | | | |
| extern BOOL HTRequest_setInternal (HTRequest * request, BOOL mode); | | | |
| extern BOOL HTRequest_internal (HTRequest * request); | | | |
| extern int HTRequest_forceFlush (HTRequest * request); | | | |
| | | | |
| /* | | | |
| */ | | */ | |
| | | | |
| #endif /* HTREQ_H */ | | #endif /* HTREQ_H */ | |
| | | | |
| /* | | /* | |
| | | | |
|
| @(#) $Id: HTReq.html,v 2.65 1998/12/15 05:34:28 frystyk Exp $ | | @(#) $Id: HTReq.html,v 2.66 1999/03/19 14:24:37 frystyk Exp $ | |
| | | | |
| */ | | */ | |
| | | | |
End of changes. 38 change blocks. |
| 237 lines changed or deleted | | 251 lines changed or added | |
|
| HTUtils.h | | HTUtils.h | |
|
| /* W3C Sample Code Library libwww Debug Information and Genera | | /* | |
| l Purpose Macros | | | |
| DEBUG INFORMATION AND GENERAL PURPOSE MACROS | | W3C Sample Code Library libwww Debug | |
| | | Information and General Purpose | |
| | | Macros | |
| | | | |
| | | ! | |
| | | Debug Information and General Purpose Macros | |
| | | ! | |
| | | */ | |
| | | | |
|
| */ | | | |
| /* | | /* | |
|
| ** (c) COPYRIGHT MIT 1995. | | ** (c) COPYRIGHT MIT 1995. | |
| ** Please first read the full copyright statement in the file COPYRIGH | | ** Please first read the full copyright statement in the file COPYRIGH. | |
| . | | | |
| */ | | */ | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| This module is a part of the W3C Sample Code Library. See also the syste | | This module is a part of the W3C Sample | |
| m dependent | | Code Library. See also the system dependent file | |
| file sysdep module for system specific information. | | sysdep module for system specific information. | |
| | | */ | |
| | | | |
|
| */ | | | |
| #ifndef HTUTILS_H | | #ifndef HTUTILS_H | |
| #define HTUTILS_H | | #define HTUTILS_H | |
|
| /* | | | |
| | | | |
|
| DESTINATION FOR USER PRINT MESSAGES | | /* | |
| | | . | |
| | | Destination for User Print Messages | |
| | | . | |
| | | | |
|
| You can send print messages to the user to various destinations dependin | | You can send print messages to the user to various destinations | |
| g on the type | | depending on the type of your application. By default, on Unix the | |
| of your application. By default, on Unix the messages are sent to stdout | | messages are sent to stdout using | |
| using fprintf. | | fprintf. If we are on MSWindows and have a windows | |
| If we are on MSWindows and have a windows applications then register a H | | applications then register a HTPrintCallback | |
| TPrintCallback | | function. This is done with HTPrint_setCallback. It tells | |
| function. This is done with HTPrint_setCallback. It tells HTPrint to cal | | HTPrint to call a HTPrintCallback. If | |
| l a | | HTDEBUG | |
| HTPrintCallback. If HTDEBUG is not defined then don't do any of the abov | | is not defined then don't do any of the above. | |
| e. | | */ | |
| | | | |
|
| */ | | | |
| typedef int HTPrintCallback(const char * fmt, va_list pArgs); | | typedef int HTPrintCallback(const char * fmt, va_list pArgs); | |
| extern void HTPrint_setCallback(HTPrintCallback * pCall); | | extern void HTPrint_setCallback(HTPrintCallback * pCall); | |
| extern HTPrintCallback * HTPrint_getCallback(void); | | extern HTPrintCallback * HTPrint_getCallback(void); | |
| | | | |
| extern int HTPrint(const char * fmt, ...); | | extern int HTPrint(const char * fmt, ...); | |
|
| /* | | | |
| | | | |
|
| DEBUG MESSAGE CONTROL | | /* | |
| | | . | |
| | | Debug Message Control | |
| | | . | |
| | | | |
|
| This is the global flag for setting the WWWTRACE options. The verbose mo | | This is the global flag for setting the WWWTRACE options. | |
| de is no longer | | The verbose mode is no longer a simple boolean but a bit field so that it | |
| a simple boolean but a bit field so that it is possible to see parts of | | is possible to see parts of the output messages. | |
| the output | | */ | |
| messages. | | | |
| | | | |
|
| */ | | | |
| #if defined(NODEBUG) || defined(NDEBUG) || defined(_NDEBUG) | | #if defined(NODEBUG) || defined(NDEBUG) || defined(_NDEBUG) | |
| #undef HTDEBUG | | #undef HTDEBUG | |
| #else | | #else | |
| #ifndef HTDEBUG | | #ifndef HTDEBUG | |
|
| #define HTDEBUG 1 | | #define HTDEBUG 1 | |
| #endif /* HTDEBUG */ | | #endif /* HTDEBUG */ | |
| #endif | | #endif | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| C Preprocessor defines | | C Preprocessor defines | |
|
| | | ) | |
| | | | |
|
| Make sure that the following macros are defined | | Make sure that the following macros are defined | |
| | | */ | |
| | | | |
|
| */ | | | |
| #ifndef __FILE__ | | #ifndef __FILE__ | |
|
| #define __FILE__ "" | | #define __FILE__ "" | |
| #endif | | #endif | |
| | | | |
| #ifndef __LINE__ | | #ifndef __LINE__ | |
|
| #define __LINE__ 0L | | #define __LINE__ 0L | |
| #endif | | #endif | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Definition of the Global Trace Flag | | Definition of the Global Trace Flag | |
|
| | | ) | |
| | | | |
|
| The global trace flag variable is available everywhere. | | The global trace flag variable is available everywhere. | |
| | | */ | |
| | | | |
|
| */ | | | |
| #ifdef HTDEBUG | | #ifdef HTDEBUG | |
| #ifdef WWW_WIN_DLL | | #ifdef WWW_WIN_DLL | |
|
| extern int * WWW_TraceFlag; /* In DLLs, we need the indirectio | | extern int * WWW_TraceFlag; /* In DLLs, we need the indirection | |
| n */ | | */ | |
| #define WWWTRACE (*WWW_TraceFlag) | | #define WWWTRACE (*WWW_TraceFlag) | |
| #else | | #else | |
|
| extern unsigned int WWW_TraceFlag; /* Global flag for all W3 trac | | extern unsigned int WWW_TraceFlag; /* Global flag for all W3 trace | |
| e */ | | */ | |
| #define WWWTRACE (WWW_TraceFlag) | | #define WWWTRACE (WWW_TraceFlag) | |
| #endif /* WWW_WIN_DLL */ | | #endif /* WWW_WIN_DLL */ | |
| #else | | #else | |
|
| #define WWWTRACE 0 | | #define WWWTRACE 0 | |
| #endif /* HTDEBUG */ | | #endif /* HTDEBUG */ | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Select which Trace Messages to show | | Select which Trace Messages to show | |
|
| | | ) | |
| | | | |
|
| Libwww has a huge set of trace messages and it is therefor a good idea t | | Libwww has a huge set of trace messages and it is therefor a good idea to | |
| o be able to | | be able to select which ones to see for any particular trace. An easy way | |
| select which ones to see for any particular trace. An easy way to set th | | to set this is using the funtion | |
| is is using the | | HTSetTraceMessageMask. The WWWTRACE | |
| funtion HTSetTraceMessageMask. The WWWTRACE define outputs messages if v | | define outputs messages if verbose mode is active according to the followin | |
| erbose mode is | | g | |
| active according to the following rules: | | rules: | |
| | | */ | |
| | | | |
|
| */ | | | |
| typedef enum _HTTraceFlags { | | typedef enum _HTTraceFlags { | |
|
| SHOW_UTIL_TRACE = 0x1, | | SHOW_UTIL_TRACE = 0x1, | |
| SHOW_APP_TRACE = 0x2, | | SHOW_APP_TRACE = 0x2, | |
| SHOW_CACHE_TRACE = 0x4, | | SHOW_CACHE_TRACE = 0x4, | |
| SHOW_SGML_TRACE = 0x8, | | SHOW_SGML_TRACE = 0x8, | |
| SHOW_BIND_TRACE = 0x10, | | SHOW_BIND_TRACE = 0x10, | |
| SHOW_THREAD_TRACE = 0x20, | | SHOW_THREAD_TRACE = 0x20, | |
| SHOW_STREAM_TRACE = 0x40, | | SHOW_STREAM_TRACE = 0x40, | |
| SHOW_PROTOCOL_TRACE = 0x80, | | SHOW_PROTOCOL_TRACE = 0x80, | |
|
| SHOW_MEM_TRACE = 0x100, | | SHOW_MEM_TRACE = 0x100, | |
| SHOW_URI_TRACE = 0x200, | | SHOW_URI_TRACE = 0x200, | |
| SHOW_AUTH_TRACE = 0x400, | | SHOW_AUTH_TRACE = 0x400, | |
| SHOW_ANCHOR_TRACE = 0x800, | | SHOW_ANCHOR_TRACE = 0x800, | |
| SHOW_PICS_TRACE = 0x1000, | | SHOW_PICS_TRACE = 0x1000, | |
| SHOW_CORE_TRACE = 0x2000, | | SHOW_CORE_TRACE = 0x2000, | |
| SHOW_MUX_TRACE = 0x4000, | | SHOW_MUX_TRACE = 0x4000, | |
| SHOW_SQL_TRACE = 0x8000, | | SHOW_SQL_TRACE = 0x8000, | |
| SHOW_XML_TRACE = 0x10000, | | SHOW_XML_TRACE = 0x10000, | |
|
| SHOW_ALL_TRACE = 0xFFFFFFFF | | SHOW_ALL_TRACE = 0xFFFFFFFF | |
| } HTTraceFlags; | | } HTTraceFlags; | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| The flags are made so that they can serve as a group flag for correlated | | The flags are made so that they can serve as a group flag for correlated | |
| trace | | trace messages, e.g. showing messages for SGML and HTML at the same time. | |
| messages, e.g. showing messages for SGML and HTML at the same time. | | */ | |
| | | | |
|
| */ | | #define UTIL_TRACE (WWWTRACE & SHOW_UTIL_TRACE) | |
| #define UTIL_TRACE (WWWTRACE & SHOW_UTIL_TRACE) | | #define APP_TRACE (WWWTRACE & SHOW_APP_TRACE) | |
| #define APP_TRACE (WWWTRACE & SHOW_APP_TRACE) | | #define CACHE_TRACE (WWWTRACE & SHOW_CACHE_TRACE) | |
| #define CACHE_TRACE (WWWTRACE & SHOW_CACHE_TRACE) | | #define SGML_TRACE (WWWTRACE & SHOW_SGML_TRACE) | |
| #define SGML_TRACE (WWWTRACE & SHOW_SGML_TRACE) | | #define BIND_TRACE (WWWTRACE & SHOW_BIND_TRACE) | |
| #define BIND_TRACE (WWWTRACE & SHOW_BIND_TRACE) | | #define THD_TRACE (WWWTRACE & SHOW_THREAD_TRACE) | |
| #define THD_TRACE (WWWTRACE & SHOW_THREAD_TRACE) | | #define STREAM_TRACE (WWWTRACE & SHOW_STREAM_TRACE) | |
| #define STREAM_TRACE (WWWTRACE & SHOW_STREAM_TRACE) | | #define PROT_TRACE (WWWTRACE & SHOW_PROTOCOL_TRACE) | |
| #define PROT_TRACE (WWWTRACE & SHOW_PROTOCOL_TRACE) | | #define MEM_TRACE (WWWTRACE & SHOW_MEM_TRACE) | |
| #define MEM_TRACE (WWWTRACE & SHOW_MEM_TRACE) | | #define URI_TRACE (WWWTRACE & SHOW_URI_TRACE) | |
| #define URI_TRACE (WWWTRACE & SHOW_URI_TRACE) | | #define AUTH_TRACE (WWWTRACE & SHOW_AUTH_TRACE) | |
| #define AUTH_TRACE (WWWTRACE & SHOW_AUTH_TRACE) | | #define ANCH_TRACE (WWWTRACE & SHOW_ANCHOR_TRACE) | |
| #define ANCH_TRACE (WWWTRACE & SHOW_ANCHOR_TRACE) | | #define PICS_TRACE (WWWTRACE & SHOW_PICS_TRACE) | |
| #define PICS_TRACE (WWWTRACE & SHOW_PICS_TRACE) | | #define CORE_TRACE (WWWTRACE & SHOW_CORE_TRACE) | |
| #define CORE_TRACE (WWWTRACE & SHOW_CORE_TRACE) | | #define MUX_TRACE (WWWTRACE & SHOW_MUX_TRACE) | |
| #define MUX_TRACE (WWWTRACE & SHOW_MUX_TRACE) | | #define SQL_TRACE (WWWTRACE & SHOW_SQL_TRACE) | |
| #define SQL_TRACE (WWWTRACE & SHOW_SQL_TRACE) | | #define XML_TRACE (WWWTRACE & SHOW_XML_TRACE) | |
| #define XML_TRACE (WWWTRACE & SHOW_XML_TRACE) | | #define ALL_TRACE (WWWTRACE & SHOW_ALL_TRACE) | |
| #define ALL_TRACE (WWWTRACE & SHOW_ALL_TRACE) | | | |
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Destination for Trace Messages | | Destination for Trace Messages | |
|
| | | ) | |
| | | | |
|
| You can send trace messages to various destinations depending on the typ | | You can send trace messages to various destinations depending on the type | |
| e of your | | of your application. By default, on Unix the messages are sent to | |
| application. By default, on Unix the messages are sent to stderr using f | | stderr using fprintf. If we are on MSWindows and | |
| printf. If we | | have a windows applications then register a HTTraceCallback | |
| are on MSWindows and have a windows applications then register a HTTrace | | function. This is done with HTTrace_setCallback. It tells | |
| Callback | | HTTrace to call a HTTraceCallback. If | |
| function. This is done with HTTrace_setCallback. It tells HTTrace to cal | | HTDEBUG is not defined then don't do any of the above. | |
| l a | | */ | |
| HTTraceCallback. If HTDEBUG is not defined then don't do any of the abov | | | |
| e. | | | |
| | | | |
|
| */ | | | |
| typedef int HTTraceCallback(const char * fmt, va_list pArgs); | | typedef int HTTraceCallback(const char * fmt, va_list pArgs); | |
| extern void HTTrace_setCallback(HTTraceCallback * pCall); | | extern void HTTrace_setCallback(HTTraceCallback * pCall); | |
| extern HTTraceCallback * HTTrace_getCallback(void); | | extern HTTraceCallback * HTTrace_getCallback(void); | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| The HTTRACE macro uses "_" as parameter separater instead of ",". This e | | The HTTRACE macro uses "_" as parameter separater | |
| nables us to | | instead of ",". This enables us to use a single macro instead | |
| use a single macro instead of a macro for each number of arguments which | | of a macro for each number of arguments which we consider a more elegant | |
| we consider a | | and flexible solution. The implication is, however, that we can't have vari | |
| more elegant and flexible solution. The implication is, however, that we | | ables | |
| can't have | | that start or end with an "_" if they are to be used in a trace | |
| variables that start or end with an "_" if they are to be used in a trac | | message. | |
| e message. | | */ | |
| | | | |
|
| */ | | | |
| #ifdef HTDEBUG | | #ifdef HTDEBUG | |
|
| | | #undef _ | |
| #define _ , | | #define _ , | |
| #define HTTRACE(TYPE, FMT) \ | | #define HTTRACE(TYPE, FMT) \ | |
|
| do { if (TYPE) HTTrace(FMT); } while (0); | | do { if (TYPE) HTTrace(FMT); } while (0); | |
| extern int HTTrace(const char * fmt, ...); | | extern int HTTrace(const char * fmt, ...); | |
| #else | | #else | |
|
| #define HTTRACE(TYPE, FMT) /* empty */ | | #define HTTRACE(TYPE, FMT) /* empty */ | |
| #endif /* HTDEBUG */ | | #endif /* HTDEBUG */ | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Data Trace Logging | | Data Trace Logging | |
|
| | | ) | |
| | | | |
|
| A similar mechanism exists for logging data, except that is adds a data | | A similar mechanism exists for logging data, except that is adds a data and | |
| and length | | length argument to the trace call. Again, you can register your own callbac | |
| argument to the trace call. Again, you can register your own callbacks i | | ks | |
| f need be. | | if need be. | |
| | | */ | |
| | | | |
|
| */ | | | |
| typedef int HTTraceDataCallback(char * data, size_t len, char * fmt, va_lis
t pArgs); | | typedef int HTTraceDataCallback(char * data, size_t len, char * fmt, va_lis
t pArgs); | |
| extern void HTTraceData_setCallback(HTTraceDataCallback * pCall); | | extern void HTTraceData_setCallback(HTTraceDataCallback * pCall); | |
| extern HTTraceDataCallback * HTTraceData_getCallback(void); | | extern HTTraceDataCallback * HTTraceData_getCallback(void); | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| Again we use the same macro expansion mechanism as for HTTrace | | Again we use the same macro expansion mechanism as for HTTrace | |
| | | */ | |
| | | | |
|
| */ | | | |
| #ifdef HTDEBUG | | #ifdef HTDEBUG | |
| #define HTTRACEDATA(DATA, LEN, FMT) HTTraceData((DATA), (LEN), FMT) | | #define HTTRACEDATA(DATA, LEN, FMT) HTTraceData((DATA), (LEN), FMT) | |
| extern int HTTraceData(char * data, size_t len, char * fmt, ...); | | extern int HTTraceData(char * data, size_t len, char * fmt, ...); | |
| #else | | #else | |
|
| #define HTTRACEDATA(DATA, LEN, FMT) /* empty */ | | #define HTTRACEDATA(DATA, LEN, FMT) /* empty */ | |
| #endif /* HTDEBUG */ | | #endif /* HTDEBUG */ | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Debug Breaks | | Debug Breaks | |
|
| | | ) | |
| | | | |
|
| Call this function and the program halts. We use the same macro expansio | | Call this function and the program halts. We use the same macro expansion | |
| n mechanism as | | mechanism as for HTTrace | |
| for HTTrace | | */ | |
| | | | |
|
| */ | | | |
| extern void HTDebugBreak(char * file, unsigned long line, const char * fmt,
...); | | extern void HTDebugBreak(char * file, unsigned long line, const char * fmt,
...); | |
| | | | |
| #ifdef HTDEBUG | | #ifdef HTDEBUG | |
| #define HTDEBUGBREAK(FMT) HTDebugBreak(__FILE__, __LINE__, FMT) | | #define HTDEBUGBREAK(FMT) HTDebugBreak(__FILE__, __LINE__, FMT) | |
| #else | | #else | |
|
| #define HTDEBUGBREAK(FMT) /* empty */ | | #define HTDEBUGBREAK(FMT) /* empty */ | |
| #endif /* HTDEBUG */ | | #endif /* HTDEBUG */ | |
|
| | | | |
| /* | | /* | |
|
| | | . | |
| | | Macros for Function Declarations | |
| | | . | |
| | | | |
|
| MACROS FOR FUNCTION DECLARATIONS | | These function prefixes are used by scripts and other tools and helps figur | |
| | | ing | |
| | | out which functions are exported and which are not. See also the | |
| | | libwww style guide. | |
| | | */ | |
| | | | |
|
| These function prefixes are used by scripts and other tools and helps fi | | #define PUBLIC /* Accessible outside this module */ | |
| guring out | | #define PRIVATE static /* Accessible only within this module */ | |
| which functions are exported and which are not. See also the libwww styl | | | |
| e guide. | | | |
| | | | |
|
| */ | | | |
| #define PUBLIC /* Accessible outside this module */ | | | |
| #define PRIVATE static /* Accessible only within this module */ | | | |
| /* | | /* | |
|
| | | . | |
| OFTEN USED INTERGER MACROS | | Often used Interger Macros | |
| | | . | |
| | | ( | |
| Min and Max functions | | Min and Max functions | |
|
| | | ) | |
| | | */ | |
| | | | |
|
| */ | | | |
| #ifndef HTMIN | | #ifndef HTMIN | |
| #define HTMIN(a,b) ((a) <= (b) ? (a) : (b)) | | #define HTMIN(a,b) ((a) <= (b) ? (a) : (b)) | |
| #define HTMAX(a,b) ((a) >= (b) ? (a) : (b)) | | #define HTMAX(a,b) ((a) >= (b) ? (a) : (b)) | |
| #endif | | #endif | |
|
| /* | | | |
| | | | |
|
| | | /* | |
| | | ( | |
| Double abs function | | Double abs function | |
|
| | | ) | |
| | | */ | |
| | | | |
|
| */ | | | |
| #ifndef HTDABS | | #ifndef HTDABS | |
| #define HTDABS(a) ((a) < 0.0 ? (-(a)) : (a)) | | #define HTDABS(a) ((a) < 0.0 ? (-(a)) : (a)) | |
| #endif | | #endif | |
|
| | | | |
| /* | | /* | |
| | | | |
|
| RETURN CODES FOR PROTOCOL MODULES AND STREAMS | | . | |
| | | Return Codes for Protocol Modules and Streams | |
| | | . | |
| | | | |
|
| Theese are the codes returned from the protocol modules, and the stream | | Theese are the codes returned from the protocol modules, and the stream mod | |
| modules. | | ules. | |
| Success are (>=0) and failure are (<0) | | Success are (>=0) and failure are (<0) | |
| | | */ | |
| | | | |
|
| */ | | #define HT_OK 0 /* Generic success */ | |
| #define HT_OK 0 /* Generic success */ | | #define HT_ALL 1 /* Used by Net Manager */ | |
| #define HT_ALL 1 /* Used by Net Manager */ | | | |
| | | | |
| #define HT_CONTINUE 100 /* Continue an operation */ | | #define HT_CONTINUE 100 /* Continue an operation */ | |
| #define HT_UPGRADE 101 /* Switching protocols */ | | #define HT_UPGRADE 101 /* Switching protocols */ | |
| | | | |
|
| #define HT_LOADED 200 /* Everything's OK */ | | #define HT_LOADED 200 /* Everything's OK */ | |
| #define HT_CREATED 201 /* New object is created */ | | #define HT_CREATED 201 /* New object is created */ | |
| #define HT_ACCEPTED 202 /* Accepted */ | | #define HT_ACCEPTED 202 /* Accepted */ | |
| #define HT_NO_DATA 204 /* OK but no data was loaded */ | | #define HT_NO_DATA 204 /* OK but no data was loaded */ | |
| #define HT_RESET_CONTENT 205 /* Reset content */ | | #define HT_RESET_CONTENT 205 /* Reset content */ | |
|
| #define HT_PARTIAL_CONTENT 206 /* Partial Content */ | | #define HT_PARTIAL_CONTENT 206 /* Partial Content */ | |
| | | | |
| #define HT_MULTIPLE_CHOICES 300 /* Multiple choices */ | | #define HT_MULTIPLE_CHOICES 300 /* Multiple choices */ | |
|
| #define HT_PERM_REDIRECT 301 /* Permanent redirection */ | | #define HT_PERM_REDIRECT 301 /* Permanent redirection */ | |
| #define HT_FOUND 302 /* Found */ | | #define HT_FOUND 302 /* Found */ | |
| #define HT_SEE_OTHER 303 /* See other */ | | #define HT_SEE_OTHER 303 /* See other */ | |
| #define HT_NOT_MODIFIED 304 /* Not Modified */ | | #define HT_NOT_MODIFIED 304 /* Not Modified */ | |
| #define HT_USE_PROXY 305 /* Use Proxy */ | | #define HT_USE_PROXY 305 /* Use Proxy */ | |
| #define HT_PROXY_REDIRECT 306 /* Proxy Redirect */ | | #define HT_PROXY_REDIRECT 306 /* Proxy Redirect */ | |
| #define HT_TEMP_REDIRECT 307 /* Temporary redirect */ | | #define HT_TEMP_REDIRECT 307 /* Temporary redirect */ | |
| | | | |
|
| #define HT_IGNORE 900 /* Ignore this in the Net manager * | | #define HT_IGNORE 900 /* Ignore this in the Net manager */ | |
| / | | #define HT_CLOSED 901 /* The socket was closed */ | |
| #define HT_CLOSED 901 /* The socket was closed */ | | #define HT_PENDING 902 /* Wait for connection */ | |
| #define HT_PENDING 902 /* Wait for connection */ | | #define HT_RELOAD 903 /* If we must reload the document */ | |
| #define HT_RELOAD 903 /* If we must reload the document * | | | |
| / | | | |
| | | | |
|
| #define HT_ERROR -1 /* Generic failure */ | | #define HT_ERROR -1 /* Generic failure */ | |
| | | | |
|
| #define HT_NO_ACCESS -401 /* Unauthorized */ | | #define HT_NO_ACCESS -401 /* Unauthorized */ | |
| #define HT_FORBIDDEN -403 /* Access forbidden */ | | #define HT_FORBIDDEN -403 /* Access forbidden */ | |
| #define HT_NOT_FOUND -404 /* Not found */ | | #define HT_NOT_FOUND -404 /* Not found */ | |
| #define HT_NOT_ACCEPTABLE -406 /* Not Acceptable */ | | #define HT_NOT_ACCEPTABLE -406 /* Not Acceptable */ | |
| #define HT_NO_PROXY_ACCESS -407 /* Proxy Authentication Failed */ | | #define HT_NO_PROXY_ACCESS -407 /* Proxy Authentication Failed */ | |
| #define HT_CONFLICT -409 /* Conflict */ | | #define HT_CONFLICT -409 /* Conflict */ | |
| #define HT_LENGTH_REQUIRED -411 /* Length required */ | | #define HT_LENGTH_REQUIRED -411 /* Length required */ | |
| #define HT_PRECONDITION_FAILED -412 /* Precondition failed */ | | #define HT_PRECONDITION_FAILED -412 /* Precondition failed */ | |
| #define HT_TOO_BIG -413 /* Request entity too large */ | | #define HT_TOO_BIG -413 /* Request entity too large */ | |
| #define HT_URI_TOO_BIG -414 /* Request-URI too long */ | | #define HT_URI_TOO_BIG -414 /* Request-URI too long */ | |
| #define HT_UNSUPPORTED -415 /* Unsupported */ | | #define HT_UNSUPPORTED -415 /* Unsupported */ | |
| #define HT_BAD_RANGE -416 /* Request Range not satisfiable */ | | #define HT_BAD_RANGE -416 /* Request Range not satisfiable */ | |
| #define HT_EXPECTATION_FAILED -417 /* Expectation Failed */ | | #define HT_EXPECTATION_FAILED -417 /* Expectation Failed */ | |
| #define HT_REAUTH -418 /* Reauthentication required */ | | #define HT_REAUTH -418 /* Reauthentication required */ | |
| #define HT_PROXY_REAUTH -419 /* Proxy Reauthentication required
*/ | | #define HT_PROXY_REAUTH -419 /* Proxy Reauthentication required
*/ | |
| | | | |
|
| #define HT_RETRY -503 /* If service isn't available */ | | #define HT_RETRY -503 /* If service isn't available */ | |
| #define HT_BAD_VERSION -505 /* Bad protocol version */ | | #define HT_BAD_VERSION -505 /* Bad protocol version */ | |
| | | | |
|
| #define HT_INTERNAL -900 /* Weird -- should never happen. */ | | #define HT_INTERNAL -900 /* Weird -- should never happen. */ | |
| #define HT_WOULD_BLOCK -901 /* If we are in a select */ | | #define HT_WOULD_BLOCK -901 /* If we are in a select */ | |
| #define HT_INTERRUPTED -902 /* Note the negative value! */ | | #define HT_INTERRUPTED -902 /* Note the negative value! | |
| | | */ | |
| #define HT_PAUSE -903 /* If we want to pause a stream */ | | #define HT_PAUSE -903 /* If we want to pause a stream */ | |
| #define HT_RECOVER_PIPE -904 /* Recover pipe line */ | | #define HT_RECOVER_PIPE -904 /* Recover pipe line */ | |
| #define HT_TIMEOUT -905 /* Connection timeout */ | | #define HT_TIMEOUT -905 /* Connection timeout */ | |
| #define HT_NO_HOST -906 /* Can't locate host */ | | #define HT_NO_HOST -906 /* Can't locate host */ | |
|
| /* | | | |
| | | | |
|
| UPPER- AND LOWERCASE MACROS | | /* | |
| | | . | |
| | | Upper- and Lowercase macros | |
| | | . | |
| | | | |
|
| The problem here is that toupper(x) is not defined officially unless isu | | The problem here is that toupper(x) is not defined officially unless isuppe | |
| pper(x) is. | | r(x) | |
| These macros are CERTAINLY needed on #if defined(pyr) || define(mips) or | | is. These macros are CERTAINLY needed on #if defined(pyr) || define(mips) | |
| BDSI | | or BDSI platforms. For safefy, we make them mandatory. | |
| platforms. For safefy, we make them mandatory. | | */ | |
| | | | |
|
| */ | | | |
| #ifndef TOLOWER | | #ifndef TOLOWER | |
| #define TOLOWER(c) tolower((int) (c)) | | #define TOLOWER(c) tolower((int) (c)) | |
| #define TOUPPER(c) toupper((int) (c)) | | #define TOUPPER(c) toupper((int) (c)) | |
| #endif | | #endif | |
|
| /* | | | |
| | | | |
|
| MAX AND MIN VALUES FOR INTEGERS AND FLOATING POINT | | /* | |
| | | . | |
| | | Max and Min values for Integers and Floating Point | |
| | | . | |
| | | */ | |
| | | | |
|
| */ | | #ifdef FLT_EPSILON /* The ANSI C way define | |
| #ifdef FLT_EPSILON /* The ANSI C way defin | | */ | |
| e */ | | | |
| #define HT_EPSILON FLT_EPSILON | | #define HT_EPSILON FLT_EPSILON | |
| #else | | #else | |
| #define HT_EPSILON 0.00000001 | | #define HT_EPSILON 0.00000001 | |
| #endif | | #endif | |
|
| /* | | | |
| | | | |
|
| THE LOCAL EQUIVALENTS OF CR AND LF | | /* | |
| | | . | |
| | | The local equivalents of CR and LF | |
| | | . | |
| | | | |
|
| We can check for these after net ascii text has been converted to the lo | | We can check for these after net ascii text has been converted to the local | |
| cal | | representation. Similarly, we include them in strings to be sent as net asc | |
| representation. Similarly, we include them in strings to be sent as net | | ii | |
| ascii after | | after translation. | |
| translation. | | */ | |
| | | | |
|
| */ | | | |
| #define LF FROMASCII('\012') /* ASCII line feed LOCAL EQUIVALENT */ | | #define LF FROMASCII('\012') /* ASCII line feed LOCAL EQUIVALENT */ | |
| #define CR FROMASCII('\015') /* Will be converted to ^M for transmission
*/ | | #define CR FROMASCII('\015') /* Will be converted to ^M for transmission
*/ | |
|
| /* | | | |
| | | | |
|
| LIBRARY DYNAMIC MEMORY MAGEMENT | | /* | |
| | | . | |
| | | Library Dynamic Memory Magement | |
| | | . | |
| | | | |
|
| The Library has it's own dynamic memory API which is declared in memory | | The Library has it's own dynamic memory API which is declared in | |
| management | | memory management module. | |
| module. | | */ | |
| | | | |
|
| */ | | | |
| #include "HTMemory.h" | | #include "HTMemory.h" | |
|
| | | | |
| /* | | /* | |
|
| | | */ | |
| | | | |
|
| */ | | | |
| #endif /* HT_UTILS.h */ | | #endif /* HT_UTILS.h */ | |
|
| /* | | | |
| | | | |
|
| ___________________________________ | | /* | |
| | | | |
|
| @(#) $Id: HTUtils.html,v 2.90 1999/02/22 22:10:1
2 frystyk Exp $ | | @(#) $Id: HTUtils.html,v 2.91 1999/04/04 00:10:14 frystyk Exp $ | |
| | | | |
|
| */ | | */ | |
| | | | |
End of changes. 112 change blocks. |
| 206 lines changed or deleted | | 237 lines changed or added | |
|