Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
golang
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
golang
Commits
6238964d
Commit
6238964d
authored
Nov 05, 2009
by
Robert Griesemer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gofmt-ify nacl
R=rsc
http://go/go-review/1018062
parent
77334b98
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
118 additions
and
121 deletions
+118
-121
av.go
src/pkg/exp/nacl/av/av.go
+36
-37
event.go
src/pkg/exp/nacl/av/event.go
+0
-0
image.go
src/pkg/exp/nacl/av/image.go
+8
-8
client.go
src/pkg/exp/nacl/srpc/client.go
+22
-22
msg.go
src/pkg/exp/nacl/srpc/msg.go
+46
-47
server.go
src/pkg/exp/nacl/srpc/server.go
+6
-7
No files found.
src/pkg/exp/nacl/av/av.go
View file @
6238964d
...
@@ -21,13 +21,13 @@ import (
...
@@ -21,13 +21,13 @@ import (
"unsafe"
;
"unsafe"
;
)
)
var
srpcEnabled
=
srpc
.
Enabled
()
;
var
srpcEnabled
=
srpc
.
Enabled
()
// native_client/src/trusted/service_runtime/include/sys/audio_video.h
// native_client/src/trusted/service_runtime/include/sys/audio_video.h
// Subsystem values for Init.
// Subsystem values for Init.
const
(
const
(
SubsystemVideo
=
1
<<
iota
;
SubsystemVideo
=
1
<<
iota
;
SubsystemAudio
;
SubsystemAudio
;
SubsystemEmbed
;
SubsystemEmbed
;
)
)
...
@@ -35,20 +35,20 @@ const (
...
@@ -35,20 +35,20 @@ const (
// Audio formats.
// Audio formats.
const
(
const
(
AudioFormatStereo44K
=
iota
;
AudioFormatStereo44K
=
iota
;
AudioFormatStereo48K
;
AudioFormatStereo48K
;
)
)
// A Window represents a connection to the Native Client window.
// A Window represents a connection to the Native Client window.
// It implements draw.Context.
// It implements draw.Context.
type
Window
struct
{
type
Window
struct
{
Embedded
bool
;
// running as part of a web page?
Embedded
bool
;
// running as part of a web page?
*
Image
;
// screen image
*
Image
;
// screen image
mousec
chan
draw
.
Mouse
;
mousec
chan
draw
.
Mouse
;
kbdc
chan
int
;
kbdc
chan
int
;
quitc
chan
bool
;
quitc
chan
bool
;
resizec
chan
bool
;
resizec
chan
bool
;
}
}
// *Window implements draw.Context
// *Window implements draw.Context
...
@@ -89,7 +89,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
...
@@ -89,7 +89,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
xsubsys
:=
subsys
;
xsubsys
:=
subsys
;
if
srpcEnabled
{
if
srpcEnabled
{
waitBridge
();
waitBridge
();
xsubsys
&^=
SubsystemVideo
|
SubsystemEmbed
;
xsubsys
&^=
SubsystemVideo
|
SubsystemEmbed
;
}
}
if
xsubsys
&
SubsystemEmbed
!=
0
{
if
xsubsys
&
SubsystemEmbed
!=
0
{
...
@@ -102,7 +102,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
...
@@ -102,7 +102,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
return
nil
,
err
;
return
nil
,
err
;
}
}
if
subsys
&
SubsystemVideo
!=
0
{
if
subsys
&
SubsystemVideo
!=
0
{
if
dx
,
dy
,
err
=
videoInit
(
dx
,
dy
);
err
!=
nil
{
if
dx
,
dy
,
err
=
videoInit
(
dx
,
dy
);
err
!=
nil
{
return
nil
,
err
;
return
nil
,
err
;
}
}
...
@@ -113,7 +113,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
...
@@ -113,7 +113,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
w
.
quitc
=
make
(
chan
bool
);
w
.
quitc
=
make
(
chan
bool
);
}
}
if
subsys
&
SubsystemAudio
!=
0
{
if
subsys
&
SubsystemAudio
!=
0
{
var
n
int
;
var
n
int
;
if
n
,
err
=
audioInit
(
AudioFormatStereo44K
,
2048
);
err
!=
nil
{
if
n
,
err
=
audioInit
(
AudioFormatStereo44K
,
2048
);
err
!=
nil
{
return
nil
,
err
;
return
nil
,
err
;
...
@@ -121,7 +121,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
...
@@ -121,7 +121,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
println
(
"audio"
,
n
);
println
(
"audio"
,
n
);
}
}
if
subsys
&
SubsystemVideo
!=
0
{
if
subsys
&
SubsystemVideo
!=
0
{
go
w
.
readEvents
();
go
w
.
readEvents
();
}
}
...
@@ -158,7 +158,7 @@ func videoUpdate(data []Color) (err os.Error) {
...
@@ -158,7 +158,7 @@ func videoUpdate(data []Color) (err os.Error) {
return
os
.
NewSyscallError
(
"video_update"
,
syscall
.
VideoUpdate
((
*
uint32
)(
&
data
[
0
])));
return
os
.
NewSyscallError
(
"video_update"
,
syscall
.
VideoUpdate
((
*
uint32
)(
&
data
[
0
])));
}
}
var
noEvents
=
os
.
NewError
(
"no events"
)
;
var
noEvents
=
os
.
NewError
(
"no events"
)
func
videoPollEvent
(
ev
[]
byte
)
(
err
os
.
Error
)
{
func
videoPollEvent
(
ev
[]
byte
)
(
err
os
.
Error
)
{
if
srpcEnabled
{
if
srpcEnabled
{
...
@@ -167,7 +167,7 @@ func videoPollEvent(ev []byte) (err os.Error) {
...
@@ -167,7 +167,7 @@ func videoPollEvent(ev []byte) (err os.Error) {
return
noEvents
;
return
noEvents
;
}
}
bytes
.
Copy
(
ev
,
&
bridge
.
share
.
eq
.
event
[
r
]);
bytes
.
Copy
(
ev
,
&
bridge
.
share
.
eq
.
event
[
r
]);
bridge
.
share
.
eq
.
ri
=
(
r
+
1
)
%
eqsize
;
bridge
.
share
.
eq
.
ri
=
(
r
+
1
)
%
eqsize
;
return
nil
;
return
nil
;
}
}
return
os
.
NewSyscallError
(
"video_poll_event"
,
syscall
.
VideoPollEvent
(
&
ev
[
0
]));
return
os
.
NewSyscallError
(
"video_poll_event"
,
syscall
.
VideoPollEvent
(
&
ev
[
0
]));
...
@@ -209,13 +209,13 @@ func AudioStream(data []uint16) (nextSize int, err os.Error) {
...
@@ -209,13 +209,13 @@ func AudioStream(data []uint16) (nextSize int, err os.Error) {
// Synchronization structure to wait for bridge to become ready.
// Synchronization structure to wait for bridge to become ready.
var
bridge
struct
{
var
bridge
struct
{
c
chan
bool
;
c
chan
bool
;
displayFd
int
;
displayFd
int
;
rpcFd
int
;
rpcFd
int
;
share
*
videoShare
;
share
*
videoShare
;
pixel
[]
Color
;
pixel
[]
Color
;
client
*
srpc
.
Client
;
client
*
srpc
.
Client
;
flushRPC
*
srpc
.
RPC
;
flushRPC
*
srpc
.
RPC
;
}
}
// Wait for bridge to become ready.
// Wait for bridge to become ready.
...
@@ -227,27 +227,27 @@ func waitBridge() {
...
@@ -227,27 +227,27 @@ func waitBridge() {
bridge
.
c
<-
<-
bridge
.
c
;
bridge
.
c
<-
<-
bridge
.
c
;
}
}
const
eqsize
=
64
;
const
eqsize
=
64
// Data structure shared with host via mmap.
// Data structure shared with host via mmap.
type
videoShare
struct
{
type
videoShare
struct
{
revision
int32
;
// definition below is rev 100 unless noted
revision
int32
;
// definition below is rev 100 unless noted
mapSize
int32
;
mapSize
int32
;
// event queue
// event queue
eq
struct
{
eq
struct
{
ri
uint32
;
// read index [0,eqsize)
ri
uint32
;
// read index [0,eqsize)
wi
uint32
;
// write index [0,eqsize)
wi
uint32
;
// write index [0,eqsize)
eof
int32
;
eof
int32
;
event
[
eqsize
][
64
]
byte
;
event
[
eqsize
][
64
]
byte
;
};
};
// now unused
// now unused
_
,
_
,
_
,
_
int32
;
_
,
_
,
_
,
_
int32
;
// video backing store information
// video backing store information
width
,
height
,
_
,
size
int32
;
width
,
height
,
_
,
size
int32
;
ready
int32
;
// rev 0x101
ready
int32
;
// rev 0x101
}
}
// The frame buffer data is videoShareSize bytes after
// The frame buffer data is videoShareSize bytes after
...
@@ -271,7 +271,7 @@ func (multimediaBridge) Run(arg, ret []interface{}, size []int) srpc.Errno {
...
@@ -271,7 +271,7 @@ func (multimediaBridge) Run(arg, ret []interface{}, size []int) srpc.Errno {
addr
,
_
,
errno
:=
syscall
.
Syscall6
(
syscall
.
SYS_MMAP
,
addr
,
_
,
errno
:=
syscall
.
Syscall6
(
syscall
.
SYS_MMAP
,
0
,
0
,
uintptr
(
st
.
Size
),
uintptr
(
st
.
Size
),
syscall
.
PROT_READ
|
syscall
.
PROT_WRITE
,
syscall
.
PROT_READ
|
syscall
.
PROT_WRITE
,
syscall
.
MAP_SHARED
,
syscall
.
MAP_SHARED
,
uintptr
(
bridge
.
displayFd
),
uintptr
(
bridge
.
displayFd
),
0
);
0
);
...
@@ -284,8 +284,8 @@ func (multimediaBridge) Run(arg, ret []interface{}, size []int) srpc.Errno {
...
@@ -284,8 +284,8 @@ func (multimediaBridge) Run(arg, ret []interface{}, size []int) srpc.Errno {
// Overestimate frame buffer size
// Overestimate frame buffer size
// (must use a compile-time constant)
// (must use a compile-time constant)
// and then reslice. 256 megapixels (1 GB) should be enough.
// and then reslice. 256 megapixels (1 GB) should be enough.
fb
:=
(
*
[
256
*
1024
*
1024
]
Color
)(
unsafe
.
Pointer
(
addr
+
videoShareSize
));
fb
:=
(
*
[
256
*
1024
*
1024
]
Color
)(
unsafe
.
Pointer
(
addr
+
videoShareSize
));
bridge
.
pixel
=
fb
[
0
:
(
st
.
Size
-
videoShareSize
)
/
4
];
bridge
.
pixel
=
fb
[
0
:
(
st
.
Size
-
videoShareSize
)
/
4
];
// Configure RPC connection back to client.
// Configure RPC connection back to client.
var
err
os
.
Error
;
var
err
os
.
Error
;
...
@@ -308,4 +308,3 @@ func init() {
...
@@ -308,4 +308,3 @@ func init() {
srpc
.
Add
(
"nacl_multimedia_bridge"
,
"hh:"
,
multimediaBridge
{});
srpc
.
Add
(
"nacl_multimedia_bridge"
,
"hh:"
,
multimediaBridge
{});
}
}
}
}
src/pkg/exp/nacl/av/event.go
View file @
6238964d
This diff is collapsed.
Click to expand it.
src/pkg/exp/nacl/av/image.go
View file @
6238964d
...
@@ -16,11 +16,11 @@ import (
...
@@ -16,11 +16,11 @@ import (
// linear slice or as a two-dimensional slice of slices.
// linear slice or as a two-dimensional slice of slices.
// Image implements image.Image.
// Image implements image.Image.
type
Image
struct
{
type
Image
struct
{
Linear
[]
Color
;
Linear
[]
Color
;
Pixel
[][]
Color
;
Pixel
[][]
Color
;
}
}
var
_
image
.
Image
=
(
*
Image
)(
nil
)
;
var
_
image
.
Image
=
(
*
Image
)(
nil
)
func
(
m
*
Image
)
ColorModel
()
image
.
ColorModel
{
func
(
m
*
Image
)
ColorModel
()
image
.
ColorModel
{
return
ColorModel
;
return
ColorModel
;
...
@@ -62,18 +62,19 @@ func newImage(dx, dy int, linear []Color) *Image {
...
@@ -62,18 +62,19 @@ func newImage(dx, dy int, linear []Color) *Image {
// A Color represents a Native Client color value,
// A Color represents a Native Client color value,
// a 32-bit R, G, B, A value packed as 0xAARRGGBB.
// a 32-bit R, G, B, A value packed as 0xAARRGGBB.
type
Color
uint32
type
Color
uint32
func
(
p
Color
)
RGBA
()
(
r
,
g
,
b
,
a
uint32
)
{
func
(
p
Color
)
RGBA
()
(
r
,
g
,
b
,
a
uint32
)
{
x
:=
uint32
(
p
);
x
:=
uint32
(
p
);
a
=
x
>>
24
;
a
=
x
>>
24
;
a
|=
a
<<
8
;
a
|=
a
<<
8
;
a
|=
a
<<
16
;
a
|=
a
<<
16
;
r
=
(
x
>>
16
)
&
0xFF
;
r
=
(
x
>>
16
)
&
0xFF
;
r
|=
r
<<
8
;
r
|=
r
<<
8
;
r
|=
r
<<
16
;
r
|=
r
<<
16
;
g
=
(
x
>>
8
)
&
0xFF
;
g
=
(
x
>>
8
)
&
0xFF
;
g
|=
g
<<
8
;
g
|=
g
<<
8
;
g
|=
g
<<
16
;
g
|=
g
<<
16
;
b
=
x
&
0xFF
;
b
=
x
&
0xFF
;
b
|=
b
<<
8
;
b
|=
b
<<
8
;
b
|=
b
<<
16
;
b
|=
b
<<
16
;
return
;
return
;
...
@@ -91,5 +92,4 @@ func toColor(color image.Color) image.Color {
...
@@ -91,5 +92,4 @@ func toColor(color image.Color) image.Color {
}
}
// ColorModel is the color model corresponding to the Native Client Color.
// ColorModel is the color model corresponding to the Native Client Color.
var
ColorModel
=
image
.
ColorModelFunc
(
toColor
);
var
ColorModel
=
image
.
ColorModelFunc
(
toColor
)
src/pkg/exp/nacl/srpc/client.go
View file @
6238964d
...
@@ -14,30 +14,30 @@ import (
...
@@ -14,30 +14,30 @@ import (
// A Client represents the client side of an SRPC connection.
// A Client represents the client side of an SRPC connection.
type
Client
struct
{
type
Client
struct
{
fd
int
;
// fd to server
fd
int
;
// fd to server
r
msgReceiver
;
r
msgReceiver
;
s
msgSender
;
s
msgSender
;
service
map
[
string
]
srv
;
// services by name
service
map
[
string
]
srv
;
// services by name
out
chan
*
msg
;
// send to out to write to connection
out
chan
*
msg
;
// send to out to write to connection
mu
sync
.
Mutex
;
// protects pending, idGen
mu
sync
.
Mutex
;
// protects pending, idGen
pending
map
[
uint64
]
*
RPC
;
pending
map
[
uint64
]
*
RPC
;
idGen
uint64
;
// generator for request IDs
idGen
uint64
;
// generator for request IDs
}
}
// A srv is a single method that the server offers.
// A srv is a single method that the server offers.
type
srv
struct
{
type
srv
struct
{
num
uint32
;
// method number
num
uint32
;
// method number
fmt
string
;
// argument format
fmt
string
;
// argument format
}
}
// An RPC represents a single RPC issued by a client.
// An RPC represents a single RPC issued by a client.
type
RPC
struct
{
type
RPC
struct
{
Ret
[]
interface
{};
// Return values
Ret
[]
interface
{};
// Return values
Done
chan
*
RPC
;
// Channel where notification of done arrives
Done
chan
*
RPC
;
// Channel where notification of done arrives
Errno
Errno
;
// Status code
Errno
Errno
;
// Status code
c
*
Client
;
c
*
Client
;
id
uint64
;
// request id
id
uint64
;
// request id
}
}
// NewClient allocates a new client using the file descriptor fd.
// NewClient allocates a new client using the file descriptor fd.
...
@@ -53,8 +53,8 @@ func NewClient(fd int) (c *Client, err os.Error) {
...
@@ -53,8 +53,8 @@ func NewClient(fd int) (c *Client, err os.Error) {
m
:=
&
msg
{
m
:=
&
msg
{
protocol
:
protocol
,
protocol
:
protocol
,
isReq
:
true
,
isReq
:
true
,
Ret
:
[]
interface
{}{
[]
byte
(
nil
)
},
Ret
:
[]
interface
{}{
[]
byte
(
nil
)
},
Size
:
[]
int
{
4000
},
Size
:
[]
int
{
4000
},
};
};
m
.
packRequest
();
m
.
packRequest
();
c
.
s
.
send
(
m
);
c
.
s
.
send
(
m
);
...
@@ -72,7 +72,7 @@ func NewClient(fd int) (c *Client, err os.Error) {
...
@@ -72,7 +72,7 @@ func NewClient(fd int) (c *Client, err os.Error) {
if
i
<
0
{
if
i
<
0
{
continue
;
continue
;
}
}
c
.
service
[
string
(
line
[
0
:
i
])]
=
srv
{
uint32
(
n
),
string
(
line
[
i
+
1
:
len
(
line
)])};
c
.
service
[
string
(
line
[
0
:
i
])]
=
srv
{
uint32
(
n
),
string
(
line
[
i
+
1
:
len
(
line
)])};
}
}
c
.
out
=
make
(
chan
*
msg
);
c
.
out
=
make
(
chan
*
msg
);
...
@@ -159,11 +159,11 @@ func (r *RPC) Start(name string, arg []interface{}) {
...
@@ -159,11 +159,11 @@ func (r *RPC) Start(name string, arg []interface{}) {
for
srv
.
fmt
[
i
]
!=
':'
{
for
srv
.
fmt
[
i
]
!=
':'
{
i
++
;
i
++
;
}
}
fmt
:=
srv
.
fmt
[
i
+
1
:
len
(
srv
.
fmt
)];
fmt
:=
srv
.
fmt
[
i
+
1
:
len
(
srv
.
fmt
)];
// Now the return prototypes.
// Now the return prototypes.
m
.
Ret
=
make
([]
interface
{},
len
(
fmt
)
-
i
);
m
.
Ret
=
make
([]
interface
{},
len
(
fmt
)
-
i
);
m
.
Size
=
make
([]
int
,
len
(
fmt
)
-
i
);
m
.
Size
=
make
([]
int
,
len
(
fmt
)
-
i
);
for
i
:=
0
;
i
<
len
(
fmt
);
i
++
{
for
i
:=
0
;
i
<
len
(
fmt
);
i
++
{
switch
fmt
[
i
]
{
switch
fmt
[
i
]
{
default
:
default
:
...
...
src/pkg/exp/nacl/srpc/msg.go
View file @
6238964d
...
@@ -17,8 +17,9 @@ import (
...
@@ -17,8 +17,9 @@ import (
// An Errno is an SRPC status code.
// An Errno is an SRPC status code.
type
Errno
uint32
type
Errno
uint32
const
(
const
(
OK
Errno
=
256
+
iota
;
OK
Errno
=
256
+
iota
;
ErrBreak
;
ErrBreak
;
ErrMessageTruncated
;
ErrMessageTruncated
;
ErrNoMemory
;
ErrNoMemory
;
...
@@ -33,27 +34,27 @@ const (
...
@@ -33,27 +34,27 @@ const (
ErrAppError
;
ErrAppError
;
)
)
var
errstr
=
[
...
]
string
{
var
errstr
=
[
...
]
string
{
OK
-
OK
:
"ok"
,
OK
-
OK
:
"ok"
,
ErrBreak
-
OK
:
"break"
,
ErrBreak
-
OK
:
"break"
,
ErrMessageTruncated
-
OK
:
"message truncated"
,
ErrMessageTruncated
-
OK
:
"message truncated"
,
ErrNoMemory
-
OK
:
"out of memory"
,
ErrNoMemory
-
OK
:
"out of memory"
,
ErrProtocolMismatch
-
OK
:
"protocol mismatch"
,
ErrProtocolMismatch
-
OK
:
"protocol mismatch"
,
ErrBadRPCNumber
-
OK
:
"invalid RPC method number"
,
ErrBadRPCNumber
-
OK
:
"invalid RPC method number"
,
ErrBadArgType
-
OK
:
"unexpected argument type"
,
ErrBadArgType
-
OK
:
"unexpected argument type"
,
ErrTooFewArgs
-
OK
:
"too few arguments"
,
ErrTooFewArgs
-
OK
:
"too few arguments"
,
ErrTooManyArgs
-
OK
:
"too many arguments"
,
ErrTooManyArgs
-
OK
:
"too many arguments"
,
ErrInArgTypeMismatch
-
OK
:
"input argument type mismatch"
,
ErrInArgTypeMismatch
-
OK
:
"input argument type mismatch"
,
ErrOutArgTypeMismatch
-
OK
:
"output argument type mismatch"
,
ErrOutArgTypeMismatch
-
OK
:
"output argument type mismatch"
,
ErrInternalError
-
OK
:
"internal error"
,
ErrInternalError
-
OK
:
"internal error"
,
ErrAppError
-
OK
:
"application error"
,
ErrAppError
-
OK
:
"application error"
,
}
}
func
(
e
Errno
)
String
()
string
{
func
(
e
Errno
)
String
()
string
{
if
e
<
OK
||
int
(
e
-
OK
)
>=
len
(
errstr
)
{
if
e
<
OK
||
int
(
e
-
OK
)
>=
len
(
errstr
)
{
return
"Errno("
+
strconv
.
Itoa64
(
int64
(
e
))
+
")"
return
"Errno("
+
strconv
.
Itoa64
(
int64
(
e
))
+
")"
;
}
}
return
errstr
[
e
-
OK
];
return
errstr
[
e
-
OK
];
}
}
// A *msgHdr is the data argument to the imc_recvmsg
// A *msgHdr is the data argument to the imc_recvmsg
...
@@ -61,45 +62,45 @@ func (e Errno) String() string {
...
@@ -61,45 +62,45 @@ func (e Errno) String() string {
// counts trusted by the system calls, the data structure is unsafe
// counts trusted by the system calls, the data structure is unsafe
// to expose to package clients.
// to expose to package clients.
type
msgHdr
struct
{
type
msgHdr
struct
{
iov
*
iov
;
iov
*
iov
;
niov
int32
;
niov
int32
;
desc
*
int32
;
desc
*
int32
;
ndesc
int32
;
ndesc
int32
;
flags
uint32
;
flags
uint32
;
}
}
// A single region for I/O. Just as unsafe as msgHdr.
// A single region for I/O. Just as unsafe as msgHdr.
type
iov
struct
{
type
iov
struct
{
base
*
byte
;
base
*
byte
;
len
int32
;
len
int32
;
}
}
// A msg is the Go representation of a message.
// A msg is the Go representation of a message.
type
msg
struct
{
type
msg
struct
{
rdata
[]
byte
;
// data being consumed during message parsing
rdata
[]
byte
;
// data being consumed during message parsing
rdesc
[]
int32
;
// file descriptors being consumed during message parsing
rdesc
[]
int32
;
// file descriptors being consumed during message parsing
wdata
[]
byte
;
// data being generated when replying
wdata
[]
byte
;
// data being generated when replying
// parsed version of message
// parsed version of message
protocol
uint32
;
protocol
uint32
;
requestId
uint64
;
requestId
uint64
;
isReq
bool
;
isReq
bool
;
rpcNumber
uint32
;
rpcNumber
uint32
;
gotHeader
bool
;
gotHeader
bool
;
status
Errno
;
// error code sent in response
status
Errno
;
// error code sent in response
Arg
[]
interface
{};
// method arguments
Arg
[]
interface
{};
// method arguments
Ret
[]
interface
{};
// method results
Ret
[]
interface
{};
// method results
Size
[]
int
;
// max sizes for arrays in method results
Size
[]
int
;
// max sizes for arrays in method results
fmt
string
;
// accumulated format string of arg+":"+ret
fmt
string
;
// accumulated format string of arg+":"+ret
}
}
// A msgReceiver receives messages from a file descriptor.
// A msgReceiver receives messages from a file descriptor.
type
msgReceiver
struct
{
type
msgReceiver
struct
{
fd
int
;
fd
int
;
data
[
128
*
1024
]
byte
;
data
[
128
*
1024
]
byte
;
desc
[
8
]
int32
;
desc
[
8
]
int32
;
hdr
msgHdr
;
hdr
msgHdr
;
iov
iov
;
iov
iov
;
}
}
func
(
r
*
msgReceiver
)
recv
()
(
*
msg
,
os
.
Error
)
{
func
(
r
*
msgReceiver
)
recv
()
(
*
msg
,
os
.
Error
)
{
...
@@ -136,10 +137,9 @@ func (r *msgReceiver) recv() (*msg, os.Error) {
...
@@ -136,10 +137,9 @@ func (r *msgReceiver) recv() (*msg, os.Error) {
// A msgSender sends messages on a file descriptor.
// A msgSender sends messages on a file descriptor.
type
msgSender
struct
{
type
msgSender
struct
{
fd
int
;
fd
int
;
hdr
msgHdr
;
hdr
msgHdr
;
iov
iov
;
iov
iov
;
}
}
func
(
s
*
msgSender
)
send
(
m
*
msg
)
os
.
Error
{
func
(
s
*
msgSender
)
send
(
m
*
msg
)
os
.
Error
{
...
@@ -222,8 +222,8 @@ func (m *msg) grow(n int) []byte {
...
@@ -222,8 +222,8 @@ func (m *msg) grow(n int) []byte {
bytes
.
Copy
(
a
,
m
.
wdata
);
bytes
.
Copy
(
a
,
m
.
wdata
);
m
.
wdata
=
a
;
m
.
wdata
=
a
;
}
}
m
.
wdata
=
m
.
wdata
[
0
:
i
+
n
];
m
.
wdata
=
m
.
wdata
[
0
:
i
+
n
];
return
m
.
wdata
[
i
:
i
+
n
];
return
m
.
wdata
[
i
:
i
+
n
];
}
}
func
(
m
*
msg
)
wuint8
(
x
uint8
)
{
func
(
m
*
msg
)
wuint8
(
x
uint8
)
{
...
@@ -529,4 +529,3 @@ func (m *msg) packResponse() {
...
@@ -529,4 +529,3 @@ func (m *msg) packResponse() {
m
.
wuint32
(
uint32
(
len
(
m
.
Ret
)));
m
.
wuint32
(
uint32
(
len
(
m
.
Ret
)));
m
.
packValues
(
m
.
Ret
);
m
.
packValues
(
m
.
Ret
);
}
}
src/pkg/exp/nacl/srpc/server.go
View file @
6238964d
...
@@ -22,13 +22,13 @@ import (
...
@@ -22,13 +22,13 @@ import (
// It reads arguments from arg, checks size for array limits,
// It reads arguments from arg, checks size for array limits,
// writes return values to ret, and returns an Errno status code.
// writes return values to ret, and returns an Errno status code.
type
Handler
interface
{
type
Handler
interface
{
Run
(
arg
,
ret
[]
interface
{},
size
[]
int
)
Errno
Run
(
arg
,
ret
[]
interface
{},
size
[]
int
)
Errno
;
}
}
type
method
struct
{
type
method
struct
{
name
string
;
name
string
;
fmt
string
;
fmt
string
;
handler
Handler
;
handler
Handler
;
}
}
var
rpcMethod
[]
method
var
rpcMethod
[]
method
...
@@ -61,7 +61,7 @@ func Add(name, fmt string, handler Handler) {
...
@@ -61,7 +61,7 @@ func Add(name, fmt string, handler Handler) {
}
}
rpcMethod
=
a
;
rpcMethod
=
a
;
}
}
rpcMethod
=
rpcMethod
[
0
:
n
+
1
];
rpcMethod
=
rpcMethod
[
0
:
n
+
1
];
rpcMethod
[
n
]
=
method
{
name
,
fmt
,
handler
};
rpcMethod
[
n
]
=
method
{
name
,
fmt
,
handler
};
}
}
...
@@ -175,7 +175,7 @@ func getFd() (fd int, err os.Error) {
...
@@ -175,7 +175,7 @@ func getFd() (fd int, err os.Error) {
// Enabled returns true if SRPC is enabled in the Native Client runtime.
// Enabled returns true if SRPC is enabled in the Native Client runtime.
func
Enabled
()
bool
{
func
Enabled
()
bool
{
_
,
err
:=
getFd
();
_
,
err
:=
getFd
();
return
err
==
nil
;
return
err
==
nil
;
}
}
...
@@ -201,4 +201,3 @@ func (serviceDiscovery) Run(arg, ret []interface{}, size []int) Errno {
...
@@ -201,4 +201,3 @@ func (serviceDiscovery) Run(arg, ret []interface{}, size []int) Errno {
func
init
()
{
func
init
()
{
Add
(
"service_discovery"
,
":C"
,
serviceDiscovery
{});
Add
(
"service_discovery"
,
":C"
,
serviceDiscovery
{});
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment