"asn1"
"big"
"bytes"
- "container/vector"
"crypto"
"crypto/dsa"
"crypto/rsa"
// ParseCertificates parses one or more certificates from the given ASN.1 DER
// data. The certificates must be concatenated with no intermediate padding.
func ParseCertificates(asn1Data []byte) ([]*Certificate, os.Error) {
- v := new(vector.Vector)
+ var v []interface{}
for len(asn1Data) > 0 {
cert := new(certificate)
if err != nil {
return nil, err
}
- v.Push(cert)
+ v = append(v, cert)
}
- ret := make([]*Certificate, v.Len())
- for i := 0; i < v.Len(); i++ {
- cert, err := parseCertificate(v.At(i).(*certificate))
+ ret := make([]*Certificate, len(v))
+ for i := 0; i < len(v); i++ {
+ cert, err := parseCertificate(v[i].(*certificate))
if err != nil {
return nil, err
}
"bufio"
"bytes"
"crypto/tls"
- "container/vector"
"encoding/base64"
"fmt"
"io"
err = e
continue
}
- vec := vector.StringVector(m[key])
- vec.Push(value)
- m[key] = vec
+ m[key] = append(m[key], value)
}
return err
}
package json
import (
- "container/vector"
"encoding/base64"
"os"
"reflect"
// arrayInterface is like array but returns []interface{}.
func (d *decodeState) arrayInterface() []interface{} {
- var v vector.Vector
+ var v []interface{}
for {
// Look ahead for ] - can only happen on first iteration.
op := d.scanWhile(scanSkipSpace)
d.off--
d.scan.undo(op)
- v.Push(d.valueInterface())
+ v = append(v, d.valueInterface())
// Next token must be , or ].
op = d.scanWhile(scanSkipSpace)
package dict
import (
- "container/vector"
"net/textproto"
"os"
"strconv"
// Fields are space separated unquoted words
// or quoted with single or double quote.
func fields(s string) ([]string, os.Error) {
- var v vector.StringVector
+ var v []string
i := 0
for {
for i < len(s) && (s[i] == ' ' || s[i] == '\t') {
break
}
}
- v.Push(unquote(s[i+1 : j-1]))
+ v = append(v, unquote(s[i+1:j-1]))
i = j
} else {
// atom
break
}
}
- v.Push(s[i:j])
+ v = append(v, s[i:j])
i = j
}
if i < len(s) {
import (
"bufio"
"bytes"
- "container/vector"
"io"
"io/ioutil"
"os"
// We could use ReadDotBytes and then Split it,
// but reading a line at a time avoids needing a
// large contiguous block of memory and is simpler.
- var v vector.StringVector
+ var v []string
var err os.Error
for {
var line string
}
line = line[1:]
}
- v.Push(line)
+ v = append(v, line)
}
return v, err
}
}
value := string(kv[i:])
- v := vector.StringVector(m[key])
- v.Push(value)
- m[key] = v
+ m[key] = append(m[key], value)
if err != nil {
return m, err
import (
"bufio"
"bytes"
- "container/vector"
"crypto/tls"
"fmt"
"http"
bw.WriteString("GET " + resourceName + " HTTP/1.1\r\n")
// Step 6-14. push request headers in fields.
- var fields vector.StringVector
- fields.Push("Upgrade: WebSocket\r\n")
- fields.Push("Connection: Upgrade\r\n")
- fields.Push("Host: " + host + "\r\n")
- fields.Push("Origin: " + origin + "\r\n")
+ var fields []string
+ fields = append(fields, "Upgrade: WebSocket\r\n")
+ fields = append(fields, "Connection: Upgrade\r\n")
+ fields = append(fields, "Host: "+host+"\r\n")
+ fields = append(fields, "Origin: "+origin+"\r\n")
if protocol != "" {
- fields.Push("Sec-WebSocket-Protocol: " + protocol + "\r\n")
+ fields = append(fields, "Sec-WebSocket-Protocol: "+protocol+"\r\n")
}
// TODO(ukai): Step 15. send cookie if any.
// Step 16-23. generate keys and push Sec-WebSocket-Key<n> in fields.
key1, number1 := generateKeyNumber()
key2, number2 := generateKeyNumber()
- fields.Push("Sec-WebSocket-Key1: " + key1 + "\r\n")
- fields.Push("Sec-WebSocket-Key2: " + key2 + "\r\n")
+ fields = append(fields, "Sec-WebSocket-Key1: "+key1+"\r\n")
+ fields = append(fields, "Sec-WebSocket-Key2: "+key2+"\r\n")
// Step 24. shuffle fields and send them out.
for i := 1; i < len(fields); i++ {