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. | 	// executing the directives that were parsed. | ||||||
| 	for i, sb := range serverBlocks { | 	for i, sb := range serverBlocks { | ||||||
| 		onces := makeOnces() | 		onces := makeOnces() | ||||||
|  | 		storages := makeStorages() | ||||||
| 
 | 
 | ||||||
| 		for _, addr := range sb.Addresses { | 		for j, addr := range sb.Addresses { | ||||||
| 			config := server.Config{ | 			config := server.Config{ | ||||||
| 				Host:       addr.Host, | 				Host:       addr.Host, | ||||||
| 				Port:       addr.Port, | 				Port:       addr.Port, | ||||||
| @ -75,8 +76,10 @@ func Load(filename string, input io.Reader) (Group, error) { | |||||||
| 							}) | 							}) | ||||||
| 							return err | 							return err | ||||||
| 						}, | 						}, | ||||||
| 						ServerBlockIndex: i, | 						ServerBlockIndex:     i, | ||||||
| 						ServerBlockHosts: sb.HostList(), | 						ServerBlockHostIndex: j, | ||||||
|  | 						ServerBlockHosts:     sb.HostList(), | ||||||
|  | 						ServerBlockStorage:   storages[dir.name], | ||||||
| 					} | 					} | ||||||
| 
 | 
 | ||||||
| 					midware, err := dir.setup(controller) | 					midware, err := dir.setup(controller) | ||||||
| @ -121,6 +124,18 @@ func makeOnces() map[string]*sync.Once { | |||||||
| 	return onces | 	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, | // arrangeBindings groups configurations by their bind address. For example, | ||||||
| // a server that should listen on localhost and another on 127.0.0.1 will | // 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 | // 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. | 	// server block as it appeared in the input. | ||||||
| 	ServerBlockIndex int | 	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 | 	// ServerBlockHosts is a list of hosts that are | ||||||
| 	// associated with this server block. All these | 	// associated with this server block. All these | ||||||
| 	// hosts, consequently, share the same tokens. | 	// hosts, consequently, share the same tokens. | ||||||
| 	ServerBlockHosts []string | 	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 | // 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 | // 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 { | func NewTestController(input string) *Controller { | ||||||
| 	return &Controller{ | 	return &Controller{ | ||||||
| 		Config: &server.Config{ | 		Config: &server.Config{ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user