You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rb...@hyperreal.org on 1999/02/16 13:57:00 UTC

cvs commit: apache-apr/docs impl.txt

rbb         99/02/16 04:57:00

  Added:       docs     impl.txt
  Log:
  A first stab at some implementation suggestions for APR types.  The only
  one I have really thought about is the APRFile, but I am putting the rest
  out as well.  Everybody have a look and make some comments.
  
  Revision  Changes    Path
  1.1                  apache-apr/docs/impl.txt
  
  Index: impl.txt
  ===================================================================
  
  ---------------------------Suggested implementations of Types
   APRIint16, APRInt32, APRUInt32, etc.
  	Proper sized (Un)signed or integers where APRU signifies unsigned, and
  	the integer is the number of bytes.
   APRINTN
          Native Integers
  	For right now, assume these are staying in.  If we decide against them,
  	they will all be replaced with an integer size that makes sense.  Right
  	now, I don't want to change them all.
   APRFile
  	Windows:  Handle.
  	UNIX:  structure {
  			 APRINT file descriptor
  			 FILE *	file pointer
  			 char * name
  			 int mode
  			 int user id
  			 int group id
  			 APTime access time
  			 APTime modified time
  			 APTime change time
  			 }
  			 
  			 Basically, the File structure stores all the stat information 
  			 about the structure.  This allows us to only open the file, stat
  			 it, and use the file if we are serving a page.  We do not need
  			 to stat it more than once.  However, we provide the stat function,
  			 because other types of programs may need it.  For example, a database
  			 should not rely upon the data in a APRFile variable to be kept up to
  			 date.  It is provided to help us "cheat" whenever possible.
  			 
  			 We have a file pointer and a file descriptor, because this is an easy
  			 way to determine if the output is buffered or not.  We could do this 
  			 with a simple boolean flag, it doesn't really metter to me.
  
  
  
   APRSocket			 in the future. */
  	APRInt32
   APRLock                       /* A generic lock, not a mutex or a condition
  				  variable, just a generic way to lock the
  				  thread/process.  (Not Apache centric, but
  				  a useful function.)
       IF PTHREADS
  	1)  mutex: pthread_mutex_t; the actual lock
  	2)  notified: Notified_node; array of conditions notified
  	3)  owner: pthread_t; current owner of lock.
       ELSE
  	We will define this later, because all initial platforms have pthreads.
   Notified_node
  	1)  lenght: APRINTN; # of entries in this node.
  	Array of abstracted size of:
  		1) condvar: APRCond; condition variable notified
  		2) numtimes: APRINTN; number of times notified
  	2)  next: Notified_node; next one of these in list.
   APRCOND
  	1) lock: APRLock; underlying APRLock
  	2) cond: pthread_cond_t; pthreads condition
  	3) notify_pending: APRINTN; cond has pending notification
   APRTime
  	APRINT64
   APRStatus
  	APRInt32
   APRERRORCODE
  	APRInt32
   APR_EXPORT
  	Should be able to use same def as APRI_EXPORT
   APR_NETDB_BUF_SIZE
  	size of host entry table.
   APRDIR
  	1) dir name: char *
  	2) dir structure: OS specific.  On UNIX  => DIR
   APRIOVec
  	1) base addr: void *; starting point in memory of data
  	2) len: APRInt32; length of data.
   APRFileInfo
  	1) type: APRFileType; enumerated type see below
  	2) size: APRUInt32; size in bytes of file
  	3) creation time: APRTime; Creation time of file per def of APRTime
  	4) modify time: APRTime; last mod time of file per def of APRTime
   APRFileType
  	enumerated type
  		APRFILE:		It's a file
  		APRDIRECTORY:	It's a directory
  		APROTHER:	It's something else, ex: pipe
   APRSeekWhere
  	enumerated type
  		APR_SEEK_SET	Set's file pointer to offset parameter
  		APR_SEEK_CUR	Set's file pointer to current position
  				plus offset
  		APR_SEEK_END	Set's file pointer to end of file
   APR_MAX_IOVEC_SIZE
  	APRInt32
  	Maximum size for APRIOVec array.  For right now, let's make it 16, but
  	we can change it later.
   APRTHDPRIV
  	void *
   APRNetAddrValue
  	enumerated type
  		APR_IpAddrNull		do not overswrite the IP addr.
  		APR_IpAddrAny		INADDR_ANY equivalent
  		APR_IpAddrLoopback	INADDR_LOOPBACK equivalent
   APRNetAddr
  	1) family: APRUInt16; Address Family
  	2) port: APRUInt16; port
  	3) ip: APRUInt32; the 32 bit ip address
   APRHostEnt
  	1) name: char *; name of host
  	2) aliases: char **; list of aliases
  	3) addrtype: Win=> APRInt16 Unix=> APRInt32; host addr type
  	4) length: Win=> APRInt16 Unix=>APRInt32; length of addr
  	5) addr_list: char *; list of addr's from Name Server
   APRSocketOptionData
  	APRInt32
  	1) APR_SockOpt_NoDelay
  	2) APR_SockOpt_Reuseaddr
  	3) APR_SockOpt_SendBufferSize
  	4) APR_SockOpt_Keepalive
  	5) APR_SockOpt_Linger	
   APRPollDesc
  	1) fdarr: APRFile; Array of File Desc's to check.
  	2) events: APRInt16; events to look for.
  	3) retevents: APRInt16; events that were triggered.
   APRTimeParametersFn	
  	function which when given a time instant in GMT, returns the timezone
  	information.  We need to implement one function for GMT and one for
  	local timezones.  This allows us to generalize changes in DST.
   APRTHDDESTFN
  	function which de-allocates thread-private data.
   APRExplodedTime
  	1)  year: APRInt32; store in 4 digit format to avoid y2k bugs.
  	2)  month: APRInt32; # of months into year [0,11]
  	3)  mday: APRInt32; day of month [1, 31]
  	4)  hour: APRInt32; hours into the day [0, 24]
  	5)  min: APRInt32; minutes into the hour [0,60]
  	6)  sec: APRInt32; seconds into the min [0,0]
  	7)  params: APRTimeParametersFn; local timezone info.
  	Not needed when giving Exp time as input, but nice if we should add 
  	them when creating output
  	9)  wday: APRInt32; day of week [0,6]
  	10)  yday: APRInt32; day of year [0,365 | 366 (leAPR year)]
   APRTHREADTYPE
  	enumerated type
  		APR_USER_THREAD
  		APR_SYSTEM_THREAD
   APRTHREADPriority
  	enumerated type
  		APR_PRIORITY_FIRST	placeholder
  		APR_PRIORITY_LOW         the lowest possible priority
  		APR_PRIORITY_NORMAL      most common expected priority 
  		APR_PRIORITY_HIGH        slightly more aggressive scheduling
  		APR_PRIORITY_URGENT      no sense to have more than one
  		APR_PRIORITY_LAST        placeholder
   APRTHREADScope
  	enumerated type
  		APR_LOCAL_THREAD
  		APR_GLOBAL_THREAD
   APRTHREADState
  	enumerated type
  		APR_JOINABLE_THREAD,
  		APR_UNJOINABLE_THREAD
   APRProcess
  	1)  pid: UNIX=> pid_t;OS specific process id. 
   APRPROCESSATTR
  	1)  stdinFd: APRFile *
  	2)  stdoutFd: APRFile *
  	3)  stderrFd: APRFile *
  	4)  currdir: char * ; current directory.
   APRPrimaryFn
  	(APRINTN *)(APRINTN, char **)
   APRShutdownHow
  	enumerated type
  		APR_SHUTDOWN_RCV		Further receives not allowed. 
                  APR_SHUTDOWN_SEND	Further sends not allowed. 
                  APR_SHUTDOWN_BOTH	Further sends and receives not allowed.
   APRSYSINFO
  	enumerated type
  		APR_SI_HOSTNAME		get name of the host 
                  APR_SI_SYSNAME           get name of the system
                  APR_SI_RELEASE           get release number of the system
                  APR_SI_ARCHITECTURE      get architecture of the system
   APRFilePerms
  	enumerated type
  		APR_ACCESS_READ_OK	Test for read permission. 
                  APR_ACCESS_WRITE_OK	Test for write permission. 
                  APR_ACCESS_EXISTS	Check existence of file.
   DPRINTF
  	debug printf.  (Only print arguement if in debug mode)
   APRTHREAD
  	1)  state:  APRUInt32;  thread's creation state 
  	2)  priority:  APRTHREADPriority;    APRparent priority, loosly defined 
  	3)  errstrsize:  APRInt32;  byte length of current error string | zero 
  	4)  errorCode;  APRErrorCode; current APR error code | zero 
  	5)  osErrorCode:  APRInt32;  mAPRping of errorCode | zero 
  	6)  errorString:  char *;   current error string | NULL 
  	7)  arg:  void *;   argument to the client's entry point 
  	8)  startfunc:  (void *)(void *arg);  the root of the client's thread 
  	9)  stack:  APRTHREADStack;  info about thread's stack (for GC) 
  	10)  environment:  void *;   pointer to execution environment 
  
  	11)  dump:  APRTHREADDumpProc;   dump thread info out 
  	12)  dumpArg:  void *;   argument for the dump function 
      If PThreads defined
  	13)  id:pthread_t;pthread identifier for the thread 
  	14)  okToDelete:  APRBool;   ok to delete the APRTHREAD struct? 
  	15)  io_cv:  APRCondVar *;a condition used to run i/o 
  	16)  waiting:  APRCondVar *;  where the thread is waiting | NULL 
  	17)  sp:  void *;recorded sp for garbage collection 
  	18)  next, prev:  APRTHREAD *;   simple linked list of all threads 
  	19)  suspend:  APRUInt32;used to store suspend and resume flags
   APRBool
  	APRInt16  nly valid values are 1 and 0.
  
  No decision how to implement yet.
   APRTHREADPROCDUMP
   APRFILEPERMS
  
  Events
   APRPOLL_READ:  File descriptor is readable
   APRPOLL_WRITE:  File descriptor is writable
   APRPOLL_EXCEPT:  File descriptor has an exception
   APRPOLL_ERROR:  File descriptor has an error
   APRPOLL_INVALID:  File descriptor is invalid
  
  Timing Defines
   DEFAULT_TIMEOUT:  default timeout value
   DEFAULT_KEEPALIVE_TIMEOUT:  default value for keepalive connections