mirror of
				https://github.com/fluffle/goirc
				synced 2025-11-04 03:58:03 +00:00 
			
		
		
		
	NFI where i was up to, store state.
This commit is contained in:
		
							parent
							
								
									762ba1e599
								
							
						
					
					
						commit
						557b178798
					
				
					 4 changed files with 80 additions and 58 deletions
				
			
		
							
								
								
									
										43
									
								
								server.cfg
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								server.cfg
									
										
									
									
									
								
							| 
						 | 
					@ -1,27 +1,18 @@
 | 
				
			||||||
port 6667
 | 
					{
 | 
				
			||||||
 | 
					  "Ports": [
 | 
				
			||||||
port 7009 {
 | 
					    { 
 | 
				
			||||||
    class = server
 | 
					      "Port": 6667
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Port": 6697,
 | 
				
			||||||
 | 
					      "Class": "client",
 | 
				
			||||||
 | 
					      "SSL": true,
 | 
				
			||||||
 | 
					      "Zip": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "Port": 7011,
 | 
				
			||||||
 | 
					      "Class": "server",
 | 
				
			||||||
 | 
					      "SSL": true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
port 6697 { ssl = true }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
port 7011 {
 | 
					 | 
				
			||||||
    ssl = true
 | 
					 | 
				
			||||||
    class = server
 | 
					 | 
				
			||||||
    bind_ip = 87.237.63.85
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
oper fluffle {
 | 
					 | 
				
			||||||
    password = foobar
 | 
					 | 
				
			||||||
    hostmask = *camelid@*
 | 
					 | 
				
			||||||
    link = true
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
oper bb101 {
 | 
					 | 
				
			||||||
    password = dongs
 | 
					 | 
				
			||||||
    hostmask = *bb10@*.enta.net
 | 
					 | 
				
			||||||
    hostmask = *bb@*.dongs.com
 | 
					 | 
				
			||||||
    renick = true
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								server.go
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								server.go
									
										
									
									
									
								
							| 
						 | 
					@ -6,8 +6,20 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	cfg := config.LoadConfig("server.cfg")
 | 
						cfg := config.NewConfig()
 | 
				
			||||||
	for e, v := range(cfg.Errors) {
 | 
						cfg.Ports[6667] = config.DefaultPort()
 | 
				
			||||||
		fmt.Println(e, v)
 | 
						cfg.Ports[6667].Port = 6667
 | 
				
			||||||
 | 
						// cfg.Ports[6697] = &config.cPort{Port: 6697, SSL: true}
 | 
				
			||||||
 | 
						fmt.Println(cfg.String())
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						cfg, err := config.ConfigFromFile("server.cfg")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Println(err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
						for i, p := range cfg.Ports {
 | 
				
			||||||
 | 
							fmt.Printf("port %d\n", i)
 | 
				
			||||||
 | 
							fmt.Println(p.String())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,10 +7,5 @@ include $(GOROOT)/src/Make.inc
 | 
				
			||||||
TARG=irc/server/config
 | 
					TARG=irc/server/config
 | 
				
			||||||
GOFILES=\
 | 
					GOFILES=\
 | 
				
			||||||
	config.go\
 | 
						config.go\
 | 
				
			||||||
    parser.go\
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(GOROOT)/src/Make.pkg
 | 
					include $(GOROOT)/src/Make.pkg
 | 
				
			||||||
 | 
					 | 
				
			||||||
parser.go: parser.rl
 | 
					 | 
				
			||||||
	ragel-svn -Z -G2 -o parser.go parser.rl
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,12 @@
 | 
				
			||||||
package config
 | 
					package config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"net"
 | 
						"net"
 | 
				
			||||||
 | 
						"json"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,17 +32,22 @@ type Config struct {
 | 
				
			||||||
	Errors []os.Error
 | 
						Errors []os.Error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ConfigFromFile(filename string) (*Config, os.Error) {
 | 
				
			||||||
func LoadConfig(filename string) *Config {
 | 
					 | 
				
			||||||
	conf := &Config{fn: filename}
 | 
						conf := &Config{fn: filename}
 | 
				
			||||||
	conf.initialise()
 | 
						conf.initialise()
 | 
				
			||||||
	if fh, err := os.Open(conf.fn, os.O_RDONLY, 0644); err == nil {
 | 
						if fh, err := os.Open(conf.fn, os.O_RDONLY, 0644); err == nil {
 | 
				
			||||||
		conf.Parse(fh)
 | 
							// Cheat and use bufio.ReadBytes to slurp the file.
 | 
				
			||||||
 | 
							rdr := bufio.NewReader(fh)
 | 
				
			||||||
 | 
							data, err := rdr.ReadBytes('\000')
 | 
				
			||||||
		fh.Close()
 | 
							fh.Close()
 | 
				
			||||||
	} else {
 | 
							if err != os.EOF {
 | 
				
			||||||
		conf.Errors = append(conf.Errors, err)
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	return conf
 | 
							if err = json.Unmarshal(data, conf); err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return conf, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (conf *Config) initialise() {
 | 
					func (conf *Config) initialise() {
 | 
				
			||||||
| 
						 | 
					@ -52,13 +60,36 @@ func (conf *Config) initialise() {
 | 
				
			||||||
	conf.Errors = make([]os.Error, 0)
 | 
						conf.Errors = make([]os.Error, 0)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (conf *Config) Rehash() {
 | 
					func NewConfig() *Config {
 | 
				
			||||||
	neu := LoadConfig(conf.fn)
 | 
						conf := new(Config)
 | 
				
			||||||
	if len(neu.Errors) > 0 {
 | 
						conf.initialise()
 | 
				
			||||||
		conf.Errors = neu.Errors
 | 
						return conf
 | 
				
			||||||
	} else {
 | 
					}
 | 
				
			||||||
		conf = neu
 | 
					
 | 
				
			||||||
 | 
					func (conf *Config) String() string {
 | 
				
			||||||
 | 
						str, err := json.MarshalIndent(conf, "" , "  ")
 | 
				
			||||||
 | 
						if err == nil {
 | 
				
			||||||
 | 
							return string(str)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						return fmt.Sprintf("marshal error: %s", err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (conf *Config) MarshalJSON() ([]byte, os.Error) {
 | 
				
			||||||
 | 
						buf := &bytes.Buffer{}
 | 
				
			||||||
 | 
						ports := make([]*cPort, len(conf.Ports))
 | 
				
			||||||
 | 
						i := 0
 | 
				
			||||||
 | 
						for _, p := range(conf.Ports) {
 | 
				
			||||||
 | 
							ports[i] = p
 | 
				
			||||||
 | 
							i++
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						b, err := json.Marshal(ports)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						buf.WriteString("{\"Ports\":")
 | 
				
			||||||
 | 
						buf.Write(b)
 | 
				
			||||||
 | 
						buf.WriteByte('}')
 | 
				
			||||||
 | 
						return buf.Bytes(), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Port configuration */
 | 
					/* Port configuration */
 | 
				
			||||||
| 
						 | 
					@ -71,7 +102,7 @@ type cPort struct {
 | 
				
			||||||
	SSL, Zip bool
 | 
						SSL, Zip bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func defaultPort() *cPort {
 | 
					func DefaultPort() *cPort {
 | 
				
			||||||
	return &cPort{
 | 
						return &cPort{
 | 
				
			||||||
		BindIP: nil, Class: "client",
 | 
							BindIP: nil, Class: "client",
 | 
				
			||||||
		SSL: false, Zip: false,
 | 
							SSL: false, Zip: false,
 | 
				
			||||||
| 
						 | 
					@ -79,18 +110,11 @@ func defaultPort() *cPort {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *cPort) String() string {
 | 
					func (p *cPort) String() string {
 | 
				
			||||||
    str := []string{fmt.Sprintf("port %d {", p.Port)}
 | 
						str, err := json.MarshalIndent(p, "" , "  ")
 | 
				
			||||||
	if p.BindIP != nil {
 | 
						if err == nil {
 | 
				
			||||||
		str = append(str,
 | 
							return string(str)
 | 
				
			||||||
			fmt.Sprintf("\tbind_ip = %s", p.BindIP.String()))
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	str = append(str,
 | 
						return fmt.Sprintf("marshal error: %s", err)
 | 
				
			||||||
		fmt.Sprintf("\tclass  = %s", p.Class),
 | 
					 | 
				
			||||||
		fmt.Sprintf("\tssl    = %t", p.SSL),
 | 
					 | 
				
			||||||
		fmt.Sprintf("\tzip    = %t", p.Zip),
 | 
					 | 
				
			||||||
		"}",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	return strings.Join(str, "\n")
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Oper configuration */
 | 
					/* Oper configuration */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue