mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-10-25 15:52:45 -04:00 
			
		
		
		
	core: Controller has field to persist server state
Also added ServerBlockHostIndex
This commit is contained in:
		
							parent
							
								
									c4a7378466
								
							
						
					
					
						commit
						e2f6c51fb0
					
				| @ -46,8 +46,9 @@ func Load(filename string, input io.Reader) (Group, error) { | ||||
| 	// executing the directives that were parsed. | ||||
| 	for i, sb := range serverBlocks { | ||||
| 		onces := makeOnces() | ||||
| 		storages := makeStorages() | ||||
| 
 | ||||
| 		for _, addr := range sb.Addresses { | ||||
| 		for j, addr := range sb.Addresses { | ||||
| 			config := server.Config{ | ||||
| 				Host:       addr.Host, | ||||
| 				Port:       addr.Port, | ||||
| @ -76,7 +77,9 @@ func Load(filename string, input io.Reader) (Group, error) { | ||||
| 							return err | ||||
| 						}, | ||||
| 						ServerBlockIndex:     i, | ||||
| 						ServerBlockHostIndex: j, | ||||
| 						ServerBlockHosts:     sb.HostList(), | ||||
| 						ServerBlockStorage:   storages[dir.name], | ||||
| 					} | ||||
| 
 | ||||
| 					midware, err := dir.setup(controller) | ||||
| @ -121,6 +124,18 @@ func makeOnces() map[string]*sync.Once { | ||||
| 	return onces | ||||
| } | ||||
| 
 | ||||
| // makeStorages makes a map of directive name to interface{} | ||||
| // so that directives' setup functions can persist state | ||||
| // between different hosts on the same server block during the | ||||
| // setup phase. | ||||
| func makeStorages() map[string]interface{} { | ||||
| 	storages := make(map[string]interface{}) | ||||
| 	for _, dir := range directiveOrder { | ||||
| 		storages[dir.name] = nil | ||||
| 	} | ||||
| 	return storages | ||||
| } | ||||
| 
 | ||||
| // arrangeBindings groups configurations by their bind address. For example, | ||||
| // a server that should listen on localhost and another on 127.0.0.1 will | ||||
| // be grouped into the same address: 127.0.0.1. It will return an error | ||||
|  | ||||
| @ -29,17 +29,29 @@ type Controller struct { | ||||
| 	// server block as it appeared in the input. | ||||
| 	ServerBlockIndex int | ||||
| 
 | ||||
| 	// ServerBlockHostIndex is the 0-based index of this | ||||
| 	// host as it appeared in the input at the head of the | ||||
| 	// server block. | ||||
| 	ServerBlockHostIndex int | ||||
| 
 | ||||
| 	// ServerBlockHosts is a list of hosts that are | ||||
| 	// associated with this server block. All these | ||||
| 	// hosts, consequently, share the same tokens. | ||||
| 	ServerBlockHosts []string | ||||
| 
 | ||||
| 	// ServerBlockStorage is used by a directive's | ||||
| 	// setup function to persist state between all | ||||
| 	// the hosts on a server block. | ||||
| 	ServerBlockStorage interface{} | ||||
| } | ||||
| 
 | ||||
| // NewTestController creates a new *Controller for | ||||
| // the input specified, with a filename of "Testfile" | ||||
| // the input specified, with a filename of "Testfile". | ||||
| // The Config is bare, consisting only of a Root of cwd. | ||||
| // | ||||
| // Used primarily for testing but needs to be exported so | ||||
| // add-ons can use this as a convenience. | ||||
| // add-ons can use this as a convenience. Does not initialize | ||||
| // the server-block-related fields. | ||||
| func NewTestController(input string) *Controller { | ||||
| 	return &Controller{ | ||||
| 		Config: &server.Config{ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user