* Skeleton of the privileged worker program.
* Some refactoring: put the NAR archive integer/string serialisation code in a separate file so it can be reused by the worker protocol implementation.
This commit is contained in:
		
							parent
							
								
									9adc074dc3
								
							
						
					
					
						commit
						40b3f64b55
					
				
					 12 changed files with 255 additions and 126 deletions
				
			
		
							
								
								
									
										71
									
								
								src/libutil/serialise.hh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/libutil/serialise.hh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | |||
| #ifndef __SERIALISE_H | ||||
| #define __SERIALISE_H | ||||
| 
 | ||||
| #include "types.hh" | ||||
| 
 | ||||
| 
 | ||||
| namespace nix { | ||||
| 
 | ||||
| 
 | ||||
| /* Abstract destination of binary data. */ | ||||
| struct Sink  | ||||
| { | ||||
|     virtual ~Sink() { } | ||||
|     virtual void operator () (const unsigned char * data, unsigned int len) = 0; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* Abstract source of binary data. */ | ||||
| struct Source | ||||
| { | ||||
|     virtual ~Source() { } | ||||
|      | ||||
|     /* The callee should store exactly *len bytes in the buffer
 | ||||
|        pointed to by data.  It should block if that much data is not | ||||
|        yet available, or throw an error if it is not going to be | ||||
|        available. */ | ||||
|     virtual void operator () (unsigned char * data, unsigned int len) = 0; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* A sink that writes data to a file descriptor. */ | ||||
| struct FdSink : Sink | ||||
| { | ||||
|     int fd; | ||||
| 
 | ||||
|     FdSink(int fd)  | ||||
|     { | ||||
|         this->fd = fd; | ||||
|     } | ||||
|      | ||||
|     void operator () (const unsigned char * data, unsigned int len); | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* A source that reads data from a file descriptor. */ | ||||
| struct FdSource : Source | ||||
| { | ||||
|     int fd; | ||||
| 
 | ||||
|     FdSource(int fd)  | ||||
|     { | ||||
|         this->fd = fd; | ||||
|     } | ||||
|      | ||||
|     void operator () (unsigned char * data, unsigned int len); | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| void writePadding(unsigned int len, Sink & sink); | ||||
| void writeInt(unsigned int n, Sink & sink); | ||||
| void writeString(const string & s, Sink & sink); | ||||
| 
 | ||||
| void readPadding(unsigned int len, Source & source); | ||||
| unsigned int readInt(Source & source); | ||||
| string readString(Source & source); | ||||
| 
 | ||||
|   | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #endif /* !__SERIALISE_H */ | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue